2013-06-28 24 views
1

我想連接到遠程mysql服務器使用SSH隧道設置使用OpenSSH密鑰文件和SSH.Net庫中所示下面的代碼段...無法連接到C#中的任何指定的MySQL主機使用SSH.Net隧道

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) 
{ 
} 

隧道是絕對成立,因爲它引發以下錯誤「無法連接到任何指定的MySQL主機的」關於sql.Open()調用...

我確定數據庫位於名爲mysername的服務器上,因爲我可以使用putty或workbench連接到MYSQL連接字符串中使用的憑據...我希望有人可以幫助

+0

此時'var e = se.Data'這行是無用的。 –

+0

是的...我試圖冒出驗證錯誤 –

回答

3

我剛剛自己解決了這個問題。只需將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的localhost版本),它可以確保默認使用IPv4。

+0

嗨阿德里安Wragg謝謝你的回答...我放棄了該項目的一段時間現在因爲它需要很長的時間來解決...我'本週有時會回到它。非常感謝您的意見。謝謝 –

+0

沒問題 - 我真的有一個相關的問題,問它作爲一個問題(http://stackoverflow.com/questions/18507945/creating-a-forwarded-port-within-an-ssh-tunnel),解決了它自己然後注意到你的問題是一個重疊的問題。 –

+0

整個人都在摸我的頭,這解決了它:) –

相關問題