繁体   English   中英

在 C# 中通过 SSH.NET 隧道连接到 MySQL 数据库时“无法连接到任何指定的 MySQL 主机”

[英]“Unable to connect to any of the specified MySQL hosts” when connecting to MySQL database via SSH.NET tunnel in C#

我正在尝试使用 C# 和 SSH.Net 连接到在 Ubuntu 上运行的 MySQL 数据库。

我们的 MySQL 数据库只允许来自网络服务器的连接,按照我从下面的代码看到的,客户端对象连接到网络服务器,然后我打开一个端口以映射到数据库服务器上的 3306。 最后, MySQLConnection对象打开一个到 MySQL 数据库的连接。

但是我在sql.Open()语句中有异常:

无法连接到任何指定的 MySQL 主机

我检查了同一主题的其他线程并尝试了他们的建议,但似乎没有一个对我有帮助。

还有更多。

这是我正在使用的一些测试代码 -

var ci =
     new ConnectionInfo(
         "server", "userid", new PasswordAuthenticationMethod("userid", "userpwd"));
using (var client = new SshClient(ci))
{
    client.Connect();
    if (client.IsConnected) //This part works fine - I can connect to my Webserver.
    {
        //not sure if this is correct in our context.
        var local = new ForwardedPortDynamic("127.0.0.1",3306); 
        client.AddForwardedPort(local);
        try
        {
            local.Start();
        }
        catch (SocketException se)
        {

        }
        string connStr =
            "Server = dbserver;Port = 3306;Database = dbname;Uid = dbuserid;Pwd = dbpwd;";
        MySqlConnection sql = new MySqlConnection(connStr);

        try
        {
            sql.Open();
            local.Stop();
        }
        catch (MySqlException se)
        {
        }
    }
}

我放在代码中的所有凭据都从与 MySQL 数据库的工作 MySQLWorkbench 连接中删除。

我只在 Windows 环境中工作,所以如果你想让我检查 Ubuntu 服务器上的某些东西,如果可能的话,也请告诉我如何检查它。

您正在通过 SSH 隧道进行连接。

所以你的主要问题是连接字符串中的Host必须是localhost (SSH隧道的本地端),而不是dbserver 或者甚至更好,使用ForwardedPort.boundHost (和ForwardedPort.boundPort )。


第二个问题是您不能使用ForwardedPortDynamic ,而使用ForwardedPortLocal


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

client.AddForwardedPort(forwardedPort);
forwardedPort.Start();

string connStr =
    string.Format(
        "Server = {0};Port = {1};Database = dbname;Uid = dbuserid;Pwd = dbpwd;",
        forwardedPort.BoundHost, forwardedPort.BoundPort);

另请参阅使用 SSH.NET 库从 .NET 连接到 MySQL


如果您的数据库不在网络服务器上运行,而是在dbhostdbhost ,则必须在ForwardedPortLocal构造函数中使用它:

var forwardedPort = new ForwardedPortLocal("127.0.0.1", "dbhost", 3306);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM