c# - SSH.NET 中的 MySQL 端口转发 - 尝试以访问权限禁止的方式访问套接字

标签 c# mysql ssh portforwarding ssh.net

在我的 VS 上安装了 Plesk。此后我无法设置 SSH 隧道来从其他服务器数据库获取数据。通过以下代码使用 SSH.NET。 (此代码在本地运行)。配置为允许 Plesk 防火墙中端口 3306 的通信。关于如何解决这个问题有什么建议吗?

错误:

[SocketException (0x271d): An attempt was made to access a socket in a way forbidden by its access permissions]

代码:

DataTable dt = new DataTable();
string IP = "ssh.xxxxxxxx.xxx";
string Username = "xxxxxxxxxx";
string password = "xxxxxxxxxx";
var connInfo = new Renci.SshNet.PasswordConnectionInfo(IP, Username, password);
using (var sshClient = new Renci.SshNet.SshClient(connInfo))
{
    sshClient.Connect();

    if (sshClient.IsConnected)
    {
        Renci.SshNet.ForwardedPortLocal port =
            new Renci.SshNet.ForwardedPortLocal("127.0.0.1", 3306, "xxxxxxxx", 3306);
        sshClient.AddForwardedPort(port);
        port.Start();
        using (MySqlConnection con = new MySqlConnection("SERVER=127.0.0.1;PORT=3306;UID=xxxxxx;PASSWORD=xxxxxxx;DATABASE=xxxxxxx; convert zero datetime=True"))
        {
            string tmpsql = "Select fname,lname,username FROM tbluser Where id=@id";

            using (MySqlCommand cmd = new MySqlCommand(tmpsql, con))
            {
                MySqlDataAdapter da = new MySqlDataAdapter(cmd);
                cmd.Parameters.AddWithValue("id", MySqlDbType.Int16).Value = UserID;
                da.Fill(dt);
            }
        }
    }
    sshClient.Disconnect();
}

最佳答案

您尝试转发的本地端口很可能已被另一个应用程序(例如本地 MySQL 数据库服务器)使用。

使用另一个端口。或者更好的是,让系统选择任何空闲的本地端口:

var port = new ForwardedPortLocal("127.0.0.1", "dbserver.example.com", 3306);
client.AddForwardedPort(port);
port.Start();

var connectionString =
    $"SERVER={port.BoundHost};PORT={port.BoundPort};" + 
     "UID=xxxxxx;PASSWORD=xxxxxxx;DATABASE=xxxxxxx; convert zero datetime=True";
using (MySqlConnection con = new MySqlConnection(connectionString))
{
    // ...
}

相关:C# SSH tunnel Postgres database connection

关于c# - SSH.NET 中的 MySQL 端口转发 - 尝试以访问权限禁止的方式访问套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58852459/

相关文章:

c# - 使用 async/await 和 TaskCompletionSource 的奇怪堆栈跟踪增长

mysql - Select 语句在行值中看不到 @ 后面的字符

linux - Azure Web应用程序: Unable to install docker buildx in SSH

c# - 查看一组实数的快速方法

c# - .net 的 Selenium 测试覆盖率(C# 和 VB)

c# - 适用于 .NET 的 Node.js

java - java中字符串的分割

mysql - 使用 MySQL 存储 URL 值的最佳方法是什么?

git - OS X上的Git-CodeCommit URL问题

ruby - Capistrano、防火墙和隧道