2012-05-30 36 views
5

Tôi đã được cung cấp một liên kết để sử dụng thư viện này để kết nối thông qua kết nối SSH tới cơ sở dữ liệu MySQL với C#.Kết nối SSH tới MySQL bằng cách sử dụng thư viện SSH.NET

Dưới đây là LINK vào thư viện vì rất nhiều bạn sẽ thấy điều này thú vị vì bạn không cần phải mở kênh SSH theo cách thủ công.

Đây là thư viện rất chi tiết và có nhiều tính năng nhưng những gì tôi muốn làm là khá đơn giản. Tôi chỉ muốn mở một kênh SSH mỗi lần tôi muốn ghi vào cơ sở dữ liệu.

Trong khi tôi đang tìm kiếm thông qua các nguồn được cung cấp tôi đã đưa ra cho phần này của các mã này có thể được tìm thấy trong TestSshCommand.cs và tôi nghĩ rằng tôi có thể sử dụng phần này cho các kết nối của tôi nhưng tôi cần sự giúp đỡ của bạn để làm cho nó hoạt động như tôi có chuỗi kết nối của tôi Tôi không biết làm thế nào để kết nối tất cả của nó.

Code:

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

Mã của tôi cho connectiong kênh phi SSH là:

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

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

Vì vậy, làm thế nào tôi có thể kết hợp mã này vào một ở trên để nó đầu tiên có thể mở một kênh SSH và sau đó thực hiện truy vấn của tôi?

Tôi có cần phải đặt mã của mình bên trong kết nốingắt kết nối các chức năng không?

Một người khác nghĩ rằng tôi có thêm tệp .dll bên trong tham chiếu và tôi phải nói rằng không có mục nhập nào đang hoạt động. Vì vậy, ai đó có thể vui lòng tải xuống thư viện và thử mã đơn giản này để xem liệu tài liệu tham khảo có đang hoạt động trên dự án của bạn không và để mọi người (có rất nhiều) có thể có giải pháp làm việc cho các dự án tương lai của họ?

EDIT:

Đây là mã của tôi mà tôi đang cố gắng thực hiện sau này. Kết nối SSH của tôi hoạt động bây giờ chỉ cần kết hợp hai thứ đó để nó hoạt động.

Vấn đề là tôi cần có một cơ sở dữ liệu cục bộ trên máy tính của mình và cần kết nối với máy chủ. Vì vậy, cổng chuyển tiếp sẽ không làm việc như somone nói trên diễn đàn này mà tôi có thể không cổng phía trước trong khi mysql đã có cổng để chạy

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

Bạn có thể nên sử dụng thư viện để chuyển tiếp từ xa đến cổng cục bộ và sử dụng nó trong chuỗi kết nối của mình. – user629926

Trả lời

4

Bạn sẽ cần phải chuyển tiếp cổng thiết lập với kết nối SSH của bạn ...

về cơ bản làm cho một kết nối SSH mà lắng nghe trên cổng 3306 trên localhost và chuyển tiếp đến máy chủ MySQL DB của bạn ...

Trong chuỗi kết nối đến MySQL DB của bạn, bạn cần phải thay đổi một phần server=... để server=localhost trong khi kết nối SSH của bạn cần phải đi đến IP máy chủ MySQL DB của bạn.

Nếu bạn không thể chuyển tiếp cổng 3306, bạn có thể sử dụng bất kỳ cổng nào bạn muốn NHƯNG bạn cần thay đổi phần port= bổ sung của chuỗi kết nối ... xem here để biết ví dụ về chuỗi kết nối với cổng khác ... Kết nối SSH vẫn nhắm đến 3306 nhưng nghe trên một cổng khác trên localhost trong trường hợp này ...

Dưới đây là một số ví dụ làm việc với mã nguồn (mặc dù không phải với SSH.NET kể từ khi tôi không sử dụng SSH.NET nhưng điều này dù sao bạn nên bắt đầu IMO):

+0

hi, cảm ơn bạn đã thử nhưng tôi đã thử tất cả điều này. Xin vui lòng đọc câu hỏi của tôi tất cả các cách. Tôi đã viết về cổng chuyển tiếp –

+0

Tôi chỉ cần kết hợp SSH.NET khi tôi đang đi qua kết nối SSH –

+0

@denonth bạn không thể sử dụng bất kỳ kết nối SSH nào ... kết nối SSH PHẢI được thiết lập làm kết nối chuyển tiếp cổng VÀ bạn cần thay đổi chuỗi kết nối MySQL của bạn - nếu không nó sẽ không hoạt động. – Yahia

6

Bạn chỉ cần sử dụng một cổng cục bộ khác cho đường hầm hơn 3306 đang được sử dụng bởi cá thể MySQL của bạn.

Ví dụ dưới đây với cổng 8001 đang được sử dụng thay vì:

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(); 
} 

Và sau đó chắc chắn trong chuỗi kết nối của bạn, bạn có 127.0.0.1 máy chủ và cổng 8001

server=127.0.0.1;port=8001 

này sẽ kết nối bất cứ điều gì chuyển đến 127.0.0.1:8001 thành ssh_hostname: 3306.

+0

Điều này hoạt động hoàn hảo, ty rất nhiều.Mặc dù, nó là cần thiết để mở nó mỗi lần? Tôi chỉ có thể mở một lần? – DanielGatti

Các vấn đề liên quan