Come impostare tunnel ssh per inoltrare ssh?


13

Ho un computer con Ubuntu dietro un router che non riesco a configurare. Comunque voglio avere accesso ssh a quel computer. Penso che sia possibile con il tunneling SSH, ma non so come farlo. Ho un altro server su cui vorrei installare il tunneling. Come farlo? O forse hai qualche altra idea su come risolvere questo problema?

Provai:

ssh -N user@my_server -L 22/localhost/8090

ma dice:

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 22
Could not request local forwarding.

Risposte:


18

Lo stai chiedendo di ascoltare sulla tua porta 22 locale e inoltrare le connessioni alla porta 8090 di un sistema remoto. Non puoi farlo, perché la tua porta locale 22 è già presa dal tuo server SSH locale.

Penso che quello che stai cercando sia l'inoltro remoto. La sostituzione -L 22:localhost:8090con -R 8090:localhost:22dirà all'host remoto di ascoltare sulla porta 8090 e inoltrare le richieste al server SSH.

Se stai lasciando la connessione in esecuzione in modo da poter accedere in un secondo momento da un sito remoto, dovrai assicurarti che la connessione non scada a causa dell'inattività aggiungendo le opzioni pertinenti ( -o TCPKeepAlive=yeso -o ServerAliveInterval=30)

Quindi finirai con qualcosa del tipo:

ssh -N user@my_server -R 8090:localhost:22 -o ServerAliveInterval=30

Inoltre, se uno dei salti di rete tra te e il server è inattivo in qualsiasi momento, la connessione si interromperà nonostante tutte le opzioni KeepAlive specificate, quindi potresti voler aggiungere questo comando a inittab o esaminare il pacchetto daemontools o la tua distribuzione equivalente, in modo che si avvii sempre all'avvio e venga riavviato quando esce per qualche motivo diverso dall'arresto del sistema (oppure è possibile eseguirlo da uno script della shell che si muove all'infinito, ma init o daemontools sono soluzioni più pulite).


Funziona quasi. Posso collegarmi al mio computer, ma posso farlo solo quando sono connesso al server. Vorrei connettermi tramite quella porta da qualsiasi luogo.
Kleve

3
Se aggiungi l'indirizzo pubblico del server o un carattere jolly alla definizione di port forwarding (-R 111.222.333.444:8090:localhost:22 o -R *: 8090: localhost: 22), potrebbe funzionare, sebbene quel genere di cose può essere disabilitato sul server. Se il server è quello che controlli, assicurati che l'opzione GatewayPorts sia abilitata in sshd_config.
David Spillett,

Ho scritto una sceneggiatura che mi aiuta a fare tunneling ssh, puoi verificarlo su: github.com/gdbtek/ssh-tunneling
Nam Nguyen,

L'aggiunta GatewayPorts Yesal mio sshd_config mi ha aiutato ad aprire la porta al pubblico.
Adam F,

8

Il motivo per cui non è possibile farlo è perché si sta tentando di inoltrare la porta 22 sul computer locale alla porta 8090 sul server remoto e qualcosa è già in esecuzione sulla porta 22 sul server locale. Molto probabilmente hai un server SSH in esecuzione. È possibile risolvere questo problema cambiando il 22 in un valore diverso. Puoi verificare se una porta è libera eseguendo:

# netstat -lep --tcp

Questo elenca tutti i socket di ascolto, quindi se la porta non è elencata, allora è gratuita.


3

Sto usando lsof -i: comando PortNumber per verificare se la porta è libera:

# lsof -i :2272

se la porta è libera non vedrai nulla nell'output.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.