2010-05-14 34 views
8

Estoy intentando incorporar el reenvío de puertos SSH a una aplicación .net que estoy escribiendo..NET Reenvío de puertos SSH

He intentado usar sharpSSH, pero requiere que el usuario ingrese su contraseña cada vez, y no quiero eso. Voy a manejar el almacenamiento de la contraseña.

He descargado Granados, pero básicamente no hay documentación para ello. Mientras examino la fuente de Granados, ¿alguien sabe cómo realizar el reenvío de puertos con Granados o con cualquier otra biblioteca SSH para .NET?

Respuesta

5

¿Se puede configurar una clave DSA en el servidor SSH de forma remota? De esta forma, podría guardar una clave para el usuario (haga esto como algo único), luego guarde la clave en el servidor como un usuario autorizado.

+1

Usar claves es mucho mejor que usar contraseñas. Votar – Freiheit

+0

usando claves es muy peligroso para conexiones inversas y huellas dactilares – K3rnel31

4

Estas alternativas de C# se derivan de java de JCraft Jsch:

  1. sharpSSH (inactivo desde ene 2010)/author's page/article
  2. DotNetSSH (inactivo desde jun 2010)
  3. SSH.NET Library (activo como de Enero de 2012)
  4. Nsch (generado/actualizado de Jsch feb 2012)

Granados product page enlaces al proyecto Poderosa que incluye un PortForwarding plugin. El source code para los archivos channel.cs y connectionmanager.cs parece implementar el reenvío de puertos. Ver esta respuesta para a recommendation.

Nsch parece ser una joya escondida dentro de MonoDevelop's NGit; es mostly-automatically converted (background info) de Jsch.

Further research en Feb 2011 por Krzysztof Kowalczyk de Sumatra PDF.

11

SSH.NET LIbrary es una forma sencilla de conseguir esto:

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

Esto es antiguo y es posible que no obtenga una respuesta pero, ¿es cliente.net el servidor que ejecuta el servidor SSH? ¿Qué sería remote.net? Cualquier solicitud a localhost: 1000 se enviará a client.net que luego enviará la solicitud a remote.net:80?¿Está bien? ¿O irá directamente a remote.net desde mi servidor local? – user1777914

+0

Sí, client.net es el servidor SSH. remote.net:80 es la computadora a la que desea conectarse a través del túnel SSH. Como usted indica, cualquier solicitud a localhost: 10000 se enviará a client.net a través de SSH, que luego reenviará la solicitud a remote.net:80. Por lo tanto, no existe una conexión directa entre localhost y remote.net. – SRoe

+0

en realidad, ese código no funciona, por alguna razón SSH.NET no resuelve el servidor local correctamente, 127.0.0.1 parece funcionar bien; pensé que esto tenía que ver con mi configuración de red; de todos modos, usar localhost no es robusto aquí –

0

aquí es un método sin promotiong cualquiera de tesis parameters :(totalmente automatizado reenvío de puertos) usando SharpSSH

(usuario, anfitrión , 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) 
0

Aunque no está bien documentado, o al menos la documentación no me lo permite, parece que es capaz de manejar conexiones SSH, incluidas transferencias de archivos y reenvío de puertos: https://github.com/sshnet/SSH.NET

Cuestiones relacionadas