我试图使用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
未连接。如果我改用Putty创建连接,并在那里建立相同的隧道,则连接成功。我错过了什么? 最佳答案
通过将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
,与localhost
的IPv6等价;但是,目标服务器使用的是IPv4。将参数更改为: var port = new ForwardedPortLocal("127.0.0.1", 3306, "localhost", 3306);
迫使隧道改为在IPv4上运行,然后我的代码完全按照我的预期工作。
关于c# - 在SSH隧道中创建转发的端口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30596676/