C# .NET SSH端口转发
我正在尝试将SSH端口转发构建到我正在编写的.NET应用程序中 我试过使用,但每次都需要用户输入密码,我不希望这样。我将负责存储密码C# .NET SSH端口转发,c#,.net,networking,ssh,portforwarding,C#,.net,Networking,Ssh,Portforwarding,我正在尝试将SSH端口转发构建到我正在编写的.NET应用程序中 我试过使用,但每次都需要用户输入密码,我不希望这样。我将负责存储密码 我已经下载了,但是基本上没有相关的文档。如何使用Granados或任何其他免费的SSH库来完成端口转发?如果在SSH服务器上远程设置DSA密钥,则可以为用户保存密钥(一次性执行此操作)然后将密钥作为授权用户保存在服务器上。这些C#替代方案都源自JCraft的Java: (自2010年1月起停用)// (自2010年6月起停用) (自2012年1月起生效) (从20
我已经下载了,但是基本上没有相关的文档。如何使用Granados或任何其他免费的SSH库来完成端口转发?如果在SSH服务器上远程设置DSA密钥,则可以为用户保存密钥(一次性执行此操作)然后将密钥作为授权用户保存在服务器上。这些C#替代方案都源自JCraft的Java:
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();
}
以下是一种不提升任何
参数的方法:
(全自动端口转发)使用
(用户、主机、Lport、Rhost、Rport、DSA密钥确认、密码)
尽管文档记录得很差,或者至少文档让我无法理解,但这似乎能够处理SSH连接,包括文件传输和端口转发:这是旧的,我可能得不到答案,但是client.net服务器是否运行SSH服务器?远程.net是什么?对localhost:1000的任何请求都将发送到client.net,然后client.net将请求转发到远程.net:80?是这样吗?或者它会直接从本地主机转到远程.net吗?是的,client.net是SSH服务器。远程.net:80是您希望通过SSH隧道连接到的计算机。正如您所说的,任何对localhost:10000的请求都将通过SSH发送到client.net,后者随后将请求转发到远程.net:80。因此,localhost和remote.net之间没有直接连接。实际上,该代码不起作用,由于某些原因,SSH.net无法正确解析localhost,127.0.0.1似乎可以正常工作;虽然这与我的网络配置有关,但无论如何,使用localhost并不可靠。这里有关于如何配置.net ssh服务器的教程吗?我一直在尝试让它正常工作,看起来您可以将
localhost
关闭端口ForwardedPortLocal
调用-缺点是任何IP都可以连接到端口10000上的SSH服务器,并将其转发到remote.net:80
。如果在您的情况下这不是一个安全问题,那么您就没事了,否则您需要计算出您的本地主机名或IP,并将其替换为本地主机名。对于反向连接和指纹,使用密钥是非常危险的
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)