2013-08-29 14 views
8

Sto tentando di usare SSH.NET per creare un tunnel dalla localhost:3306 alla porta 3306 su una macchina remota:Creazione di un porto trasmessa all'interno di un tunnel SSH

PrivateKeyFile file = new PrivateKeyFile(@" .. path to private key .. "); 
    using (var client = new SshClient(" .. remote server .. ", "ubuntu", file)) 
    { 

     client.Connect(); 
     var port = new ForwardedPortLocal(3306, "localhost", 3306); 
     client.AddForwardedPort(port); 
     port.Start(); 

      // breakpoint set within the code here 

     client.Disconnect(); 
    } 

Quando il punto di interruzione viene colpito, client.IsConnected sta tornando true, ma telnet localhost 3306 non si sta connettendo. Se invece creo la connessione usando Putty e installo lo stesso tunnel, ha successo. Cosa mi sono perso?

+0

Viene visualizzato un avviso specifico per l'applicazione telnet? Si chiude? I dati di connessione binaria potrebbero non essere visualizzati ... –

+0

Si blocca, non riuscendo a connettersi. Quando utilizzo Putty ottengo una stringa di dati. –

+0

Prova [questo collegamento] (http://sshnet.codeplex.com/discussions/348423): Penso che disconnettere il client sia il problema. E se interrompi tra 'Start' e' Disconnect' puoi anche fermare l'inoltro. –

risposta

9

Cambiando i parametri di ForwardedPortLocal a:

var port = new ForwardedPortLocal("localhost", 3306, "localhost", 3306); 

(per rendere più esplicita quale interfaccia ero vincolanti per), e aggiungendo il seguente codice nel proprio prima port.Start();:

port.RequestReceived += delegate(object sender, PortForwardEventArgs e) 
    { 
     Console.WriteLine(e.OriginatorHost + ":" + e.OriginatorPort); 
    }; 

I notato la seguente uscita essendo:

::1:60309 

il 012.parte di questo era ::1, che è l'equivalente IPv6 di localhost; tuttavia, il server di destinazione utilizzava IPv4. La modifica dei parametri per:

var port = new ForwardedPortLocal("127.0.0.1", 3306, "localhost", 3306); 

costretto il tunnel di eseguire più di IPv4, invece, e il mio codice poi lavorato esattamente come me lo aspettavo a.

+0

Sheesh, sono felice che tu abbia trovato questa soluzione! Grazie per averci segnalato ... –

+0

Grazie mille per la soluzione. Ho provato a lavorare su questo da ore>. < –

+0

Vedere la mia domanda se il tuo problema è stato come quello di un'istanza MySQL locale sulla tua macchina di sviluppo :-) http://stackoverflow.com/questions/40592492/ssh-access-using -renci-ssh-to-MySQL server/40606542 # 40606542 –

0

Dopo aver riscontrato lo stesso problema e analizzarlo, e considerato che sono giunto alla conclusione che si tratta di un bug (sebbene possa essere considerato discutibile, chiaramente il comportamento sorprende gli utenti dell'API SSH.NET).

Quindi l'ho segnalato su Unexpected behavior (a.k.a. bug) on local tunnel · Issue #117 · sshnet/SSH.NET · GitHub.

Fino a quando non viene risolto, la soluzione in c# - Creating a forwarded port within an SSH tunnel - Stack Overflow funziona.

Problemi correlati