2012-05-30 40 views
5

我被給了一個鏈接來使用此庫通過SSH連接到使用C#的MySQL數據庫進行連接。使用SSH.NET庫連接到MySQL的SSH連接

這是圖書館的LINK,因爲您不需要手動打開SSH通道,因此您會發現很多有趣的內容。

這是一個非常詳細的圖書館,有很多功能,但我想要做的很簡單。每次我想要寫入數據庫時​​,我只想打開一個SSH通道。

雖然我是通過提供我來到了這部分的代碼可以在TestSshCommand.cs找到源搜索,我想我可以用這部分我的連接,但我需要你的幫助來得到它的工作,因爲我有我的連接字符串我不知道如何連接它的所有。

代碼:

public void Test_Execute_SingleCommand() 
     { 
      using (var client = new SshClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD)) 
      { 
       client.Connect(); 
       var result = ExecuteTestCommand(client); 
       client.Disconnect(); 

       Assert.IsTrue(result); 
      } 

我的接法非SSH的信道碼是:

con.ConnectionString = ConfigurationManager.ConnectionStrings["Con2"].ConnectionString; 
      con.Open(); 
      cmd = new MySqlCommand("SELECT COUNT(*) FROM " + ConfigSettings.ReadSetting("main"), con); 

    //...... more of the code 

那麼,如何可以驗證碼結合起來,上面一個,這樣它可以先打開一個SSH通道和然後執行我的查詢?

是否需要將我的代碼放入連接斷開函數?

還有一種想法我在文件裏面添加了.dll文件,我必須說沒有任何導入工作。那麼是否有人可以下載庫並嘗試使用這個簡單的代碼來查看引用是否適用於您的項目,以便每個人(很多人)都可以爲他們未來的項目提供工作解決方案?

編輯:

這是我的代碼,我試圖做以後。我的SSH連接現在只需要將這兩者結合起來就可以工作。

問題是我需要在本地PC上有一個數據庫,並且需要連接到服務器。因此,端口轉發,不會因爲有人爲工作說在論壇上,我不能端口轉發,而MySQL的已經有端口運行

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

您可能應該使用庫將遠程本地端口轉發並在連接字符串中使用該端口。 – user629926

回答

4

你需要設置端口轉發的SSH連接...

基本上使該端口上偵聽3306 localhost上轉發,爲您的MySQL數據庫服務器的SSH連接...

在連接字符串您的MySQL數據庫,你需要,而你的SSH連接部分server=...更改爲server=localhost需要去你的MySQL數據庫服務器的IP。

如果你不能轉發端口3306你可以使用任何你想要的端口,但你需要改變另外的port=部分的連接字符串...有關不同端口的連接字符串的例子請參見here ... SSH連接仍然以3306爲目標,但在本例中偵聽localhost上的不同端口...

這裏是源代碼工作的一些例子(儘管不是SSH.NET,因爲我不使用SSH.NET但這仍然應該讓你開始IMO):

+0

嗨,謝謝你的嘗試,但我已經嘗試了所有這些。請一路閱讀我的問題。我寫了端口轉發 –

+0

我只需要結合SSH.NET,因爲我通過SSH連接 –

+0

@denonth您不能使用任何SSH連接... SSH連接必須設置爲端口轉發連接,您需要改變你的MySQL連接字符串 - 否則它將無法工作。 – Yahia

6

你只需要使用不同的本地端口正在使用你的MySQL實例隧道超過3306。

例以下端口8001所代替:

using (var client = new SshClient("ssh_hostname", "ssh_username", "ssh_password")) 
{ 
    client.Connect(); 
    var tunnel = new ForwardedPortLocal("127.0.0.1", 8001, "127.0.0.1", 3306); 
    client.AddForwardedPort(tunnel); 
    tunnel.Start(); 
    using (var DB = new DBContext()) 
    { 
    //MySQL interaction here! 
    scores = DB.Table 
     .Where(x => !String.IsNullOrEmpty(x.SomeField)) 
     .ToList(); 
    } 
    tunnel.Stop(); 
} 

,然後確保你的連接字符串中您在服務器127.0.0.1,端口8001

server=127.0.0.1;port=8001 

這將連接東西去127.0.0.1:8001到ssh_hostname:3306。

+0

這非常完美,非常有效。儘管每次打開它都是必要的嗎?我只能打開一次嗎? – DanielGatti