2013-08-29 50 views
8

Tôi đang cố gắng sử dụng SSH.NET để tạo ra một đường hầm từ localhost:3306 tới cổng 3306 trên một máy từ xa:Tạo một cổng chuyển tiếp trong một đường hầm SSH

PrivateKeyFile file = new PrivateKeyFile(@" .. path to private key .. "); 
    using (var client = new SshClient(" .. remote server .. ", "ubuntu", file)) 
    { 

     client.Connect(); 
     var port = new ForwardedPortLocal(3306, "localhost", 3306); 
     client.AddForwardedPort(port); 
     port.Start(); 

      // breakpoint set within the code here 

     client.Disconnect(); 
    } 

Khi breakpoint là hit, client.IsConnected đang trở lại true, nhưng telnet localhost 3306 không kết nối. Nếu tôi tạo kết nối bằng Putty thay vào đó, và thiết lập cùng một đường hầm ở đó, nó sẽ thành công. Tôi đã bỏ lỡ điều gì?

+0

Bạn có nhận được cảnh báo cụ thể cho ứng dụng telnet không? Nó có đóng không? Dữ liệu kết nối nhị phân có thể không được hiển thị ... –

+0

Nó bị treo, không kết nối được. Khi sử dụng Putty tôi nhận được một chuỗi dữ liệu. –

+0

Thử [liên kết này] (http://sshnet.codeplex.com/discussions/348423): Tôi nghĩ rằng ngắt kết nối máy khách là vấn đề. Và nếu bạn ngắt giữa 'Bắt đầu' và 'Ngắt kết nối', bạn cũng có thể tạm dừng chuyển tiếp. –

Trả lời

9

Bằng cách thay đổi các thông số của ForwardedPortLocal tới:

var port = new ForwardedPortLocal("localhost", 3306, "localhost", 3306); 

(để làm cho nó rõ ràng mà giao diện tôi đã gắn vào), và thêm đoạn mã sau vào ngay trước khi port.Start();:

port.RequestReceived += delegate(object sender, PortForwardEventArgs e) 
    { 
     Console.WriteLine(e.OriginatorHost + ":" + e.OriginatorPort); 
    }; 

tôi nhận thấy sản lượng sau đây:

::1:60309 

e.OriginatorHost một phần của điều này là ::1, tương đương với IPv6 là localhost; tuy nhiên, máy chủ đích đang sử dụng IPv4. Thay đổi các tham số thành:

var port = new ForwardedPortLocal("127.0.0.1", 3306, "localhost", 3306); 

buộc đường hầm chạy qua IPv4 thay vì mã của tôi hoạt động chính xác như tôi mong đợi.

+0

Sheesh, tôi rất vui vì bạn đã tìm thấy giải pháp đó! Cảm ơn bạn đã báo cáo lại ... –

+0

Cảm ơn bạn rất nhiều vì giải pháp. Tôi đã cố gắng để làm việc này kể từ giờ>. < –

+0

Xem câu hỏi của tôi nếu bạn đấu tranh như tôi đã với một trường hợp MySQL địa phương trên máy dev của bạn :-) http://stackoverflow.com/questions/40592492/ssh-access-using -renci-ssh-to-mysql-server/40606542 # 40606542 –

0

Sau khi nhấn cùng một vấn đề và phân tích nó, và xem xét tôi đi đến kết luận rằng đó là một lỗi (mặc dù nó có thể được coi là đáng tranh cãi, rõ ràng hành vi làm người dùng ngạc nhiên của SSH.NET API).

Vì vậy, tôi đã báo cáo nó trên Unexpected behavior (a.k.a. bug) on local tunnel · Issue #117 · sshnet/SSH.NET · GitHub.

Cho đến khi được khắc phục, cách giải quyết trong c# - Creating a forwarded port within an SSH tunnel - Stack Overflow hoạt động.

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