I am trying to build in SSH port forwarding into a .net application that I am writing.
I have tried using sharpSSH, but it requires the user to input their password every time, and I don't want that. I am going to handle storing the password.
I have downloaded Granados, but there is basically zero documentation for it. While I sift through the Granados source, does anyone know how to accomplish port forwarding with Granados or any other free SSH library for .NET?
Can you set up an DSA key on the SSH server remotely? That way, you could save a key for the user (do this as a one-time thing), then save the key on the server as an authorized user.
SSH.NET LIbrary is a simple way to achieve this:
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();
}
These C# alternatives are all derived from JCraft's java Jsch:
- sharpSSH (inactive since Jan 2010) / author's page / article
- DotNetSSH (inactive since Jun 2010)
- SSH.NET Library (active as of Jan 2012)
- Nsch (generated/updated from Jsch Feb 2012)
The Granados product page links to the Poderosa project which includes a PortForwarding plugin. The source code for the channel.cs and connectionmanager.cs files there appear to implement port forwarding. See this answer for a recommendation.
Nsch appears to be a hidden gem within MonoDevelop's NGit; it is mostly-automatically converted (background info) from Jsch.
Further research in Feb 2011 by Krzysztof Kowalczyk of Sumatra PDF.
here is a method without promotiong any of theses parameters :
(Fully-automated port forwarding) using SharpSSH
(user,host,Lport,Rhost,Rport,DSA-key-confirmation,Password)
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)
Although poorly documented - or at least the documentation eludes me - this seems to be able to handle SSH connections including file transfers and port forwarding: https://github.com/sshnet/SSH.NET