我试图使用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/

10-13 09:04