.NET SSH Port Forwarding

2019-03-11 13:29发布

I am trying to build in SSH port forwarding into a .net application that I am writing.

I have tried using sharpSSH, but it requires the user to input their password every time, and I don't want that. I am going to handle storing the password.

I have downloaded Granados, but there is basically zero documentation for it. While I sift through the Granados source, does anyone know how to accomplish port forwarding with Granados or any other free SSH library for .NET?

5条回答
ら.Afraid
2楼-- · 2019-03-11 13:41

SSH.NET LIbrary is a simple way to achieve this:

using (var client = new SshClient("client.net", "user", "password"))
{
    client.Connect();

    var port = new ForwardedPortLocal("localhost", 10000, "remote.net", 80);
    client.AddForwardedPort(port);

    port.Exception += delegate(object sender, ExceptionEventArgs e)
    {
        Console.WriteLine(e.Exception.ToString());
    };
    port.Start();

    // ... hold the port open ... //

    port.Stop();
    client.Disconnect();
}
查看更多
老娘就宠你
3楼-- · 2019-03-11 13:43

These C# alternatives are all derived from JCraft's java Jsch:

  1. sharpSSH (inactive since Jan 2010) / author's page / article
  2. DotNetSSH (inactive since Jun 2010)
  3. SSH.NET Library (active as of Jan 2012)
  4. Nsch (generated/updated from Jsch Feb 2012)

The Granados product page links to the Poderosa project which includes a PortForwarding plugin. The source code for the channel.cs and connectionmanager.cs files there appear to implement port forwarding. See this answer for a recommendation.

Nsch appears to be a hidden gem within MonoDevelop's NGit; it is mostly-automatically converted (background info) from Jsch.

Further research in Feb 2011 by Krzysztof Kowalczyk of Sumatra PDF.

查看更多
Emotional °昔
4楼-- · 2019-03-11 13:44

Can you set up an DSA key on the SSH server remotely? That way, you could save a key for the user (do this as a one-time thing), then save the key on the server as an authorized user.

查看更多
爷、活的狠高调
5楼-- · 2019-03-11 14:03

Although poorly documented - or at least the documentation eludes me - this seems to be able to handle SSH connections including file transfers and port forwarding: https://github.com/sshnet/SSH.NET

查看更多
贼婆χ
6楼-- · 2019-03-11 14:07

here is a method without promotiong any of theses parameters : (Fully-automated port forwarding) using SharpSSH

(user,host,Lport,Rhost,Rport,DSA-key-confirmation,Password)

    Dim JJ As Tamir.SharpSsh.jsch.JSch = New Tamir.SharpSsh.jsch.JSch()
    Dim sess As Tamir.SharpSsh.jsch.Session = JJ.getSession("user", "remoteadd.dydns.com")
    Dim conf As Hashtable = New Hashtable()
    conf.Add("StrictHostKeyChecking", "no")
    sess.setConfig(conf)
    sess.setPassword("password")
    sess.connect()
    sess.setPortForwardingR(45, "127.0.0.1", 256)
查看更多
登录 后发表回答