9

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

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

我已经下载了Granados,但它的文档基本上为零。如何使用 Granados 或任何其他免费的 .NET SSH 库完成端口转发?

4

5 回答 5

17

SSH.NET是实现此目的的一种简单方法:

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();
}
于 2012-06-15T19:38:53.750 回答
5

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

于 2010-05-24T21:17:15.183 回答
4

这些 C# 替代方案都源自 JCraft 的 Java Jsch

  1. sharpSSH(自 2010 年 1 月起停用)/作者页面/文章
  2. DotNetSSH(自 2010 年 6 月起处于非活动状态)
  3. SSH.NET 库(截至 2012 年 1 月有效)
  4. Nsch(从 Jsch 2012 年 2 月生成/更新)

Granados产品页面链接到包含PortForwarding 插件的Poderosa项目。那里的channel.csconnectionmanager.cs文件的源代码似乎实现了端口转发。请参阅此答案以获取建议

Nsch似乎是 MonoDevelop 的Ngit中隐藏的宝石;它主要是从 Jsch自动转换的背景信息)。

Sumatra PDF的Krzysztof Kowalczyk于 2011 年 2 月进行了进一步研究。

于 2012-01-19T19:58:58.323 回答
0

这是一种不使用SharpSSH提升任何这些parameters: (全自动端口转发)的方法

(用户、主机、Lport、Rhost、Rport、DSA-key-confirmation、密码)

    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)
于 2014-03-11T11:18:48.670 回答
0

尽管文档记录不佳 - 或者至少文档让我无法理解 - 这似乎能够处理 SSH 连接,包括文件传输和端口转发:https ://github.com/sshnet/SSH.NET

于 2017-08-14T12:18:59.963 回答