【问题标题】:Unable to connect to any of the specified MySQL hosts in C# using SSH.Net Tunnel无法使用 SSH.Net 隧道连接到 C# 中的任何指定 MySQL 主机
【发布时间】:2013-06-28 12:38:43
【问题描述】:

我正在尝试使用使用 OpenSSH 密钥文件和 SSH.Net 库设置的 SSH 隧道连接到远程 mysql 服务器,如下面的代码部分所示...

try
{
    PrivateKeyFile pkfile = new PrivateKeyFile("C:\\Users\\OpenSSHKey", "mypassword");
    var client = new SshClient("servername.com", 22, "myusername", pkfile);
    client.Connect();
    if (client.IsConnected)
    {
        var local = new ForwardedPortLocal(22, "localhost", 3306);
        client.AddForwardedPort(local);
        try
        {
            local.Start();
        }
        catch (SocketException se)
        {

        }
        string connStr = "server=localhost;user=mysql_username;database=database_name;port=3306;password=MyDBPassword;";
        MySqlConnection sql = new MySqlConnection(connStr);
        sql.Ping();
        try
        {
            sql.Open();
        }
        catch (MySqlException se)
        {
        }
    }
}
catch(Exception e)
{
}

隧道肯定设置好了,因为它在 sql.Open() 调用上抛出以下错误“无法连接到任何指定的 MySQL 主机”...

我确定数据库位于名为 mysername 的服务器上,因为我可以使用 putty 或 workbench 使用 MYSQL 连接字符串中使用的凭据连接到它...我希望有人能提供帮助

【问题讨论】:

  • var e = se.Data 这行目前没用。
  • 是的...我试图冒泡验证错误

标签: mysql ssh portforwarding


【解决方案1】:

我刚刚自己解决了这个问题。只需将 ForwardedPortLocal 更改为:

    var local = new ForwardedPortLocal("127.0.0.1", 3306, "127.0.0.1", 3306);

在您的原始文件中,您将源端口指定为22。但是,您的 MySql 连接将连接到本地计算机上的端口 3306(然后您将通过隧道连接到目标上的端口 3306),因此您需要确保转发的端口在本地侦听 3306 以开始.

另外,我已将localhost 更改为127.0.0.1。我遇到的第二个问题是我机器上的localhost 实际上解析为::1,一个IPv6 地址,而目标服务器没有“说”IPv6。通过将其切换为127.0.0.1(IPv4 的本地主机版本),可以确保默认使用 IPv4。

【讨论】:

  • 嗨 Adrian Wragg 感谢您的回答...我已经放弃了该项目的那部分一段时间,因为它需要很长时间才能解决...我有时会回到它周..非常感谢您的意见。谢谢
  • 没问题 - 我实际上遇到了一个相关问题,将其作为一个问题 (stackoverflow.com/questions/18507945/…) 提出,然后自己解决了,然后发现您的问题遇到了重叠问题。
猜你喜欢
  • 1970-01-01
  • 2013-08-02
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 2018-12-25
  • 2011-06-07
相关资源
最近更新 更多