2013-08-29 7 views
8

Я пытаюсь использовать SSH.NET создать туннель от localhost:3306 к порту 3306 на удаленной машине:Создание пересылаемой порта в пределах 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(); 
    } 

Когда точка останова, client.IsConnected возвращается true, но telnet localhost 3306 не подключается. Если я создаю соединение с помощью Putty вместо этого и настрою там тот же туннель, он будет успешным. Что я пропустил?

+0

Вы получаете специальное предупреждение для приложения telnet? Он закрывается? Данные двоичного соединения могут не отображаться ... –

+0

Он зависает, не удается подключиться. При использовании Putty я получаю строку данных. –

+0

Попробуйте [эта ссылка] (http://sshnet.codeplex.com/discussions/348423): Я думаю, что отключение клиента - проблема. И если вы нарушаете «Start» и «Disconnect», вы также можете остановить пересылку. –

ответ

9

Изменяя параметры ForwardedPortLocal на:

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

(сделать его явным, какой интерфейс я привязки к), и добавить следующий код непосредственно перед port.Start();:

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

I заметил следующее:

::1:60309 

e.OriginatorHost часть этого номера была ::1, что эквивалентно IPv6 localhost; однако целевой сервер использовал IPv4. Изменение параметров:

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

заставил туннель бежать через IPv4 вместо этого, и тогда мой код работал именно так, как я ожидал, что это.

+0

Sheesh, я рад, что вы нашли это решение! Спасибо за отчетность ... –

+0

Большое вам спасибо за решение. Я пытался работать с этим с часами>. < –

+0

См. Мой вопрос, если вы боретесь, как я был с локальным экземпляром MySQL на вашей машине dev :-) http://stackoverflow.com/questions/40592492/ssh-access-using -renci-SSH-к-MySQL-сервер/40606542 # 40606542 –

0

После удара с той же проблемой и ее анализа, а также учитывая, что я пришел к выводу, что это ошибка (хотя это можно считать спорным, ясно поведение удивляет пользователей SSH.NET API).

Поэтому я сообщил об этом на Unexpected behavior (a.k.a. bug) on local tunnel · Issue #117 · sshnet/SSH.NET · GitHub.

Пока не зафиксировано, обходной путь в c# - Creating a forwarded port within an SSH tunnel - Stack Overflow работает.

Смежные вопросы