Создание перенаправленного порта в туннеле SSH
Я пытаюсь использовать SSH.NET чтобы создать туннель из localhost:3306
для порта 3306 на удаленной машине:
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
не подключается. Если я создам соединение с помощью шпатлевки вместо этого и настрою тот же туннель, он преуспеет. Что я пропустил?
2 ответов
путем изменения параметров ForwardedPortLocal на:
var port = new ForwardedPortLocal("localhost", 3306, "localhost", 3306);
(чтобы сделать его явным, к какому интерфейсу я привязывался), и добавление следующего кода непосредственно перед port.Start();
:
port.RequestReceived += delegate(object sender, PortForwardEventArgs e)
{
Console.WriteLine(e.OriginatorHost + ":" + e.OriginatorPort);
};
я заметил, что выводится следующее:
::1:60309
на e.OriginatorHost
часть этого ::1
, который является эквивалентом IPv6 localhost
, однако, конечный сервер использует протокол IPv4. Изменение параметров на:
var port = new ForwardedPortLocal("127.0.0.1", 3306, "localhost", 3306);
принудил туннель к вместо этого запустите IPv4, и мой код работал точно так, как я ожидал.
после удара по той же проблеме и ее анализа, и учитывая, что я пришел к выводу, что это ошибка (хотя это можно считать спорным, очевидно, поведение удивляет пользователей SSH.NET API).
поэтому я сообщил об этом неожиданное поведение (a.к. a. ошибка) в локальном туннеле * проблема #117 * sshnet / SSH.NET * GitHub.
пока он не будет исправлен, обходной путь в c# - создание перенаправленного порта в туннеле SSH-переполнение стека завод.