.NET SSH端口转发

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

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

我已经下载了Granados ,但基本上没有文档。 当我筛选Granados源代码时,是否有人知道如何使用Granados或任何其他.NET 免费 SSH库完成端口转发?

您可以远程在SSH服务器上设置DSA密钥吗? 这样,您可以为用户保存密钥(将其作为一次性操作),然后将密钥作为授权用户保存在服务器上。

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

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

  1. sharpSSH (自2010年1月起无效)/ 作者的页面 / 文章
  2. DotNetSSH (自2010年6月起停用)
  3. SSH.NET库 (自2012年1月起生效 )
  4. Nsch (由Jsch 2012年2月生成/更新)

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

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

2011年2月,苏门答腊的Krzysztof Kowalczyk 进一步研究 PDF。

这里是一个没有提升任何parameters : 全自动端口转发)使用SharpSSH

(用户,主机,学习端口,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) 

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