通过SSH连接MySQL时提示套接字访问权限被禁止如何解决
SSH隧道连接MySQL端口权限报错解决方案
你遇到的An attempt was made to access a socket in a way forbidden by its access permissions报错,本质是程序无法绑定本地指定的3306端口,常见原因和对应解决方法如下:
常见报错原因
- 本地已经运行了MySQL服务,占用了127.0.0.1的3306端口,导致SSH端口转发无法重复绑定该端口
- Windows系统下程序没有管理员运行权限,无法绑定部分受系统保护的端口
- 本地防火墙、安全软件拦截了程序对3306端口的监听请求
最优解决方法:更换本地转发端口
把本地绑定的端口改为未被占用的高位端口即可,比如用3307替代本地3306,修改后的代码如下:
Console.WriteLine("Connecting to MySQL..."); using (var client = new SshClient("ssh sever", "ssh username", "ssh password")) { client.Connect(); if (client.IsConnected) { // 修改本地绑定端口为3307 var portForwarded = new ForwardedPortLocal("127.0.0.1", 3307, "127.0.0.1", 3306); client.AddForwardedPort(portForwarded); portForwarded.Start(); // MySQL连接串端口同步改为3307 using (MySqlConnection con = new MySqlConnection("SERVER=127.0.0.1;PORT=3307;UID=root;PASSWORD=rootPassword;DATABASE=UserDb;SslMode=none")) { using (MySqlCommand com = new MySqlCommand("SELECT * FROM fhulu", con)) { com.CommandType = CommandType.Text; DataSet ds = new DataSet(); MySqlDataAdapter da = new MySqlDataAdapter(com); da.Fill(ds); foreach (DataRow drow in ds.Tables[0].Rows) { Console.WriteLine(drow[0].ToString() + " -- " + drow[1].ToString() + " -- " + drow[2].ToString()); } } } client.Disconnect(); } }
其他可选解决方法
- 检查本地端口占用:Windows系统打开命令提示符执行
netstat -ano | findstr "3306",如果有进程占用3306端口,可停掉对应进程后再运行程序 - 提升程序运行权限:右键点击运行的IDE或编译后的exe文件,选择以管理员身份运行后再测试连接
- 检查本地安全规则:确认防火墙、杀毒软件没有拦截程序的端口监听请求
内容的提问来源于stack exchange,提问作者fhulufhelo hanyahanya
相关产品推荐
相关产品推荐

