我正在尝试将 SSH 端口转发构建到我正在编写的 .NET 应用程序中。
我尝试过使用sharpSSH,但它要求用户每次都输入密码,我不希望这样。我将处理存储密码。
我已经下载了Granados,但它的文档基本上为零。如何使用 Granados 或任何其他免费的 .NET SSH 库完成端口转发?
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();
}
如果您在 SSH 服务器上远程设置了一个 DSA 密钥,您可以为用户保存一个密钥(作为一次性操作),然后将密钥作为授权用户保存在服务器上。
这些 C# 替代方案都源自 JCraft 的 Java Jsch:
Granados产品页面链接到包含PortForwarding 插件的Poderosa项目。那里的channel.cs和connectionmanager.cs文件的源代码似乎实现了端口转发。请参阅此答案以获取建议。
Nsch似乎是 MonoDevelop 的Ngit中隐藏的宝石;它主要是从 Jsch自动转换的(背景信息)。
Sumatra PDF的Krzysztof Kowalczyk于 2011 年 2 月进行了进一步研究。
这是一种不使用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)
尽管文档记录不佳 - 或者至少文档让我无法理解 - 这似乎能够处理 SSH 连接,包括文件传输和端口转发:https ://github.com/sshnet/SSH.NET