2017-06-14 178 views
0

我在C#中,需要遠程連接到一臺Linux服務器,以便連接到一個Amazon RDS數據庫的可執行文件。C#編程遠程連接到Linux服務器連接到Amazon RDS數據庫

在Windows服務器上可執行的生活。由於權限,只有Linux服務器才能連接到RDS數據庫。由於C#可執行文件需要來自數據庫的信息,因此我發現自己需要先連接到Linux服務器,然後再從那裏連接到數據庫。

// include files 
using MySql.Data; 
using MySql.Data.MySqlClient; 
using Renci.SshNet;  
//... 
    using (var client = new SshClient("server.amazonaws.com", "serverUser", privateKeyFile)) 
    { 
      client.Connect(); 

      MySqlConnection databaseConnection = null; 
      string connString = "Server=dbServer.rds.amazonaws.com; database=database " +    
           "UID=databaseUser password=databasePassword"; 
      databaseConnection = new MySqlConnection(connString); 
      databaseConnection.Open(); 

      string queryString = "SELECT * FROM tbl_table;"; // errors here 


      // ..... } 

我分配,上面寫着查詢字符串時,得到一個錯誤「MySql.Data.MySqlClient.MySqlException:‘無法連接任何指定的MySQL主機’」

我使用SSH.Net形成連接到Linux服務器。我正在使用MySQL Connector來連接和檢索數據庫中的信息。

如果有什麼錯我的代碼,我會非常感激它被指出,但我敢肯定,我錯過了一些必要的步驟,以便正確地連接到數據庫。我注意到其他問題提出類似的問題,但他們要麼沒有使用RDS DB,要麼不需要通過C#進行SSH登錄。

編輯:自從發佈這個,我執行此代碼的服務器已被授予訪問RDS數據庫。我目前沒有時間嘗試發佈解決方案。我可以說的是,在獲得訪問權限後,只有使用MySql連接器才能順利運行。

+0

你究竟想做什麼。打開一個ssh會話到一臺機器,然後試圖從Windows機器打開一個sql連接沒有做任何事情。您可以使用ssh會話執行sql命令行操作。或者你需要在linux系統上有一個服務器,你可以與之交談以轉發請求。 – pm100

+0

對不起,我知道這是一個很大的混亂。 C#可執行文件需要來自數據庫的信息,因爲它使用SqlDataReader對象來獲取某些方法的行信息。我不反對在Linux上有一個服務,但是我沒有看到自己能夠使用這些對象。我繼承了這個項目並且時間有限,所以我不想嘗試改變使用該對象的所有任務與使用其他任務。 會使用SSH會話來執行SQL命令行動作仍然允許我這樣做嗎?我不確定你的意思。 – r19996

+0

這是糟糕的設計。您應該在Linux機器上創建一個暴露API的Web應用程序,然後從Windows機器使用該API訪問數據庫。你正在爲自己解決各種安全問題。 – Icemanind

回答

0

通過SSH連接不是enoguh。你想做的事不能做。您的代碼存在的問題是AWS服務僅允許從Linux機器連接到數據庫。您正嘗試從Windows機器啓動連接。要做到這一點的唯一方法是創建某種Linux機器與Windows機器,否則你需要登錄您的AWS帳戶並授予你的Windows機器

+1

可以完成,但有正確的工具。 –

1

你快到了。我對SSH.NET不熟悉,但在使用Putty(SSH終端)時,您可以配置SSH「端口隧道」或「端口轉發」,它將在本地計算機上設置監聽端口。到本地端口的任何連接都會通過SSH連接轉發到遠程計算機,然後轉發到最終目標。

https://github.com/sshnet/SSH.NET確實提到它支持「端口轉發」。看看使用它。

  1. 連接到你的Linux機器使用SSH.NET
  2. 配置從本地主機前一個端口:12345 dbServer.rds.amazonaws.com:3306
  3. 使用localhost:12345連接字符串爲目標服務器中,而比dbServer.rds.amazonaws.com:3306對於MySqlConnection