.NET SSH端口转发

时间:2010-05-14 16:07:26

标签: c# .net networking ssh portforwarding

我正在尝试将SSH端口转发到我正在编写的.NET应用程序中。

我尝试过使用sharpSSH,但它要求用户每次都输入密码,我不希望这样。我将处理存储密码。

我已经下载了Granados,但基本上没有文档记录。如何使用Granados或任何其他免费 SSH for .NET实现端口转发?

5 个答案:

答案 0 :(得分:13)

SSH.NET library是实现此目标的简单方法:

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

答案 1 :(得分:5)

如果您在SSH服务器上远程设置DSA密钥,则可以为用户保存密钥(以一次性方式执行此操作),然后将密钥作为授权用户保存在服务器上。

答案 2 :(得分:4)

这些C#替代品都来自JCraft的Java Jsch

  1. sharpSSH(自2010年1月起失效)/ author's page / article
  2. DotNetSSH(自2010年6月起失效)
  3. SSH.NET Library(自2012年1月起生效)
  4. Nsch(由Jsch 2012年2月生成/更新)
  5. Granados product page链接到Poderosa项目,其中包含PortForwarding plugin。那里source codechannel.cs文件的connectionmanager.cs似乎实现了端口转发。请参阅a recommendation的答案。

    Nsch似乎是MonoDevelop NGit中隐藏的宝石;来自Jsch的是mostly-automatically convertedbackground info)。

    2011年2月,Further research获得了苏门答腊的Krzysztof Kowalczyk PDF。

答案 3 :(得分:0)

以下是一种不使用SharpSSH推广任何parameters: (全自动端口转发)的方法

(适用用户,主机,学习端口,RHOST,RPORT,DSA-密钥确认,密码)

    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)

答案 4 :(得分:0)

虽然记录不完整 - 或者至少文档中没有 - 但这似乎能够处理SSH连接,包括文件传输和端口转发:https://github.com/sshnet/SSH.NET