我正在尝试将SSH端口转发到我正在编写的.NET应用程序中。
我尝试过使用sharpSSH,但它要求用户每次都输入密码,我不希望这样。我将处理存储密码。
我已经下载了Granados,但基本上没有文档记录。如何使用Granados或任何其他免费 SSH for .NET实现端口转发?
答案 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:
Granados product page链接到Poderosa项目,其中包含PortForwarding plugin。那里source code和channel.cs文件的connectionmanager.cs似乎实现了端口转发。请参阅a recommendation的答案。
Nsch似乎是MonoDevelop NGit中隐藏的宝石;来自Jsch的是mostly-automatically converted(background 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