簡體   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