2012-05-30 82 views
0

我想通过SSH通道连接到服务器上的mysql数据库。无法使用ssh客户端连接到mysql数据库

我已经下载这个SSH.Net库。

这是我尝试过的,我认为它会在我的安全连接建立后工作。

我的SSH连接已建立,但没有执行与数据库的正常连接。

所以,检查我的代码,请:

using (var client = new SshClient("cpanel****", "******", "******")) 
      { 
      client.Connect(); 
      con = new MySqlConnection(GetConnectionString()); 
      con.Open(); 
      cmd = new MySqlCommand(String.Format("insert into {0} values (null, ?Parname , ?Parname2, ?Parname3, ?Parname4, ?Parname5, ?Parname6, ?Parname7);", ConfigSettings.ReadSetting("main")), con); 
      cmd.Parameters.Add("?Parname", MySqlDbType.Double).Value = Math.Round(deciLat, 5); 
      // ... more parameters 
      cmd.ExecuteNonQuery(); 
      client.Disconnect(); 
      } 
+0

它给你任何错误?连接字符串是正确的? – Nico

+0

是连接字符串是否正确。我使用相同的一个mysql工作台来查看我的数据库。它给我超时错误。我曾尝试连接到服务器只有正常的链接和服务器给我超时,但与ssh通道连接时,它正在工作。我不确定这是否真的打开了一个ssh通道,所以我可以使用它,或者如果你了解我,我需要一个额外的参数来显示它到连接字符串。你可以检查这个图书馆,让我说出你的想法。 –

+0

我可能会错过一些东西...... MySqlConnection如何知道SshClient? –

回答

1

这里是一个教程http://georgelantz.com/2007/09/10/access-mysql-through-ssh-tunnel-in-a-windows-net-application/这听起来很合理。

基本思想是建立与隧道(也称为端口转发)的SSH连接,然后将您的MySQL连接指向localhost。

SSH隧道将连接重定向到localhost:XX到ssh服务器端口:YY。所以你的YY端口将是mysql连接端口,并且在你的连接字符串中你可以使用localhost:XX。

您正在使用的SSH库似乎也支持端口转发,因此您可能也可以使用它。

+0

感谢您的链接,我会尝试。你可以看到这个源代码,我参与了打开ssh通道这是顺便说一句。工作只需要弄清楚如何插入我的MySQL请求:http://sshnet.codeplex.com/SourceControl/changeset/view/16341#143028 –

+0

你想看看这个http://sshnet.codeplex.com/SourceControl/changeset/view/16341#143026他们是如何做端口转发的。 –

+0

我不太了解这个端口转发。为什么我需要在这些参数中的任何一个localhost?我的数据库在服务器上,为什么我需要转发它。在你提到的程序中。在远程端口我需要把3306作为MySQL是3306,但我不知道我的SSH端口和localport,请你给我一个手请 –