Вопрос

I'm attempting to use SSH.NET to create a tunnel from localhost:3306 to port 3306 on a remote machine:

  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();
  }

When the breakpoint is hit, client.IsConnected is returning true, but telnet localhost 3306 is not connecting. If I create the connection using Putty instead, and set up the same tunnel there, it succeeds. What have I missed?

Это было полезно?

Решение

By changing the parameters of ForwardedPortLocal to:

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

(to make it explicit which interface I was binding to), and adding the following code in just before port.Start();:

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

I noticed the following being output:

    ::1:60309

The e.OriginatorHost part of this was ::1, which is the IPv6 equivalent of localhost; however, the destination server was using IPv4. Changing the parameters to:

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

forced the tunnel to run over IPv4 instead, and my code then worked exactly as I'd expected it to.

Другие советы

After hitting the same problem and analyzing it, and considering I came to the conclusion that it is a bug (though it might be considered arguable, clearly the behavior surprises users of SSH.NET API).

So I reported it on Unexpected behavior (a.k.a. bug) on local tunnel · Issue #117 · sshnet/SSH.NET · GitHub.

Until it is fixed, the workaround in c# - Creating a forwarded port within an SSH tunnel - Stack Overflow works.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top