【问题标题】:Connection to MySQL from .NET code over an SSH.NET ForwardedPortLocal does not work通过 SSH.NET ForwardedPortLocal 从 .NET 代码连接到 MySQL 不起作用
【发布时间】:2020-01-18 19:36:48
【问题描述】:

我必须通过外部网络访问具有 IP (1.1.1.1) 的计算机上的 MySQL 数据库。

我用 SSH.NET 创建了一个隧道,但是我无法访问 MySQL 中数据库所在计算机的 IP(1.1.1.1)。

直到公共 IP,隧道似乎工作,但我无法访问计算机 IP (1.1.1.1),因为我不了解 SSH.NET 的工作原理。 使用 PuTTY 输入端口的公共 IP,并在 SSH 隧道部分插入 IP 计算机(1.1.1.1),端口为 3306,它运行良好。 代码是这样的

using (var client = new SshClient("ip public", port, "user", "password")) 
{
    client.Connect();
    if (client.IsConnected)
    {
        var portForwarded = new ForwardedPortLocal("127.0.0.1",22, "1.1.1.1",3306);
        client.AddForwardedPort(portForwarded);
        portForwarded.Start();

        string db = @"Server=127.0.0.1;Port=3306;Database=xxx;Uid=root;Pwd=xxx;";
        {
            var mySQLCon = new MySqlConnection(db);

            mySQLCon.Open();

            if (mySQLCon.State == ConnectionState.Open)
            {
                MainWindow stx = new MainWindow(db);
                stx.ShowDialog();
            }
        }
    }
}

我把参数放在ForwardedPortLocal里面错了吗?

ForwardedPortLocal("127.0.0.1",22, "1.1.1.1",3306);

我想知道我在ForwardedPortLocal 中输入的参数是否正确,或者我在使用 SSH.NET 建立隧道时错在哪里...

【问题讨论】:

标签: c# mysql ssh tunnel ssh.net


【解决方案1】:

ForwardedPortLocalboundPort 参数是要转发的本地端口。那是您与 MySQL 客户端连接的端口。所以不是22

虽然您可以硬编码像3306 这样的端口,但最好通过省略该参数让 SSH.NET 自动分配一个空闲的本地端口:

var portForwarded = new ForwardedPortLocal("127.0.0.1", "1.1.1.1", 3306);

然后在连接字符串中使用ForwardedPortLocal.BoundPort,而不是硬编码3306


另见:

【讨论】:

    猜你喜欢
    • 2015-12-12
    • 2012-06-04
    • 1970-01-01
    • 2022-11-02
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    相关资源
    最近更新 更多