Quello che stai cercando si chiama tunnel inverso. ssh
fornisce tramite l' -R
interruttore:
-R [bind_address:]port:host:hostport
Specifies that the given port on the remote (server) host is to
be forwarded to the given host and port on the local side. This
works by allocating a socket to listen to port on the remote side,
and whenever a connection is made to this port, the connection is
forwarded over the secure channel, and a connection is made to host
port hostport from the local machine.
Come l'OP ha scoperto con la loro risposta, la sintassi è la seguente:
$ ssh -f -N -R vvv:localhost:22 w.x.y.z
Esempio
Ho 2 computer in rete lappy
e remotey
. Quindi eseguo il seguente comando su lappy
:
$ ssh -f -N -R 12345:localhost:22 remotey
Posso confermare che funziona:
$ ps -eaf|grep "[l]ocalhost:22"
saml 27685 1 0 11:10 ? 00:00:00 ssh -f -N -R 12345:localhost:22 remotey
Ora, se ssh
separatamente sul sistema remoto remotey
ed eseguo questo comando, posso vedere che ora accetta connessioni sulla porta 12345 sull'interfaccia locale del sistema remoto:
$ netstat -an|grep :12345
tcp 0 0 127.0.0.1:12345 0.0.0.0:* LISTEN
tcp 0 0 ::1:12345 :::* LISTEN
Test della connessione
Puoi vedere che il tunnel SSH inverso funziona come segue.
accedere remotey
[user@lappy ~]$ ssh remotey
testare la porta del tunnel inverso
[user@remotey ~]$ ssh -p 12345 localhost
ora dovrebbe essere tornato a ridere
user@localhost's password:
Last login: Thu Aug 1 17:53:54 2013
/usr/bin/xauth: creating new authority file /home/user/.Xauthority
[user@lappy ~]$
Porte su interfacce diverse da localhost ( lo
)?
Potresti essere lasciato a grattarti la testa se provi un comando come questo e non sembra funzionare, o si lega sempre a una porta sull'interfaccia localhost ( lo
).
Per esempio:
lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey
NOTA: questo comando indica di aprire la porta 12345 @ remotey e di eseguire il tunneling di tutte le connessioni alla porta 22 @ lappy.
Quindi in remoto:
remotey$ netstat -an|grep 12345
tcp 0 0 127.0.0.1:12345 0.0.0.0:* LISTEN
Quello che sta succedendo è che sshd
le configurazioni non ti consentono di farlo. In effetti senza questa funzione abilitata ( GatewayPorts
) non sarai in grado di associare alcuna ssh
porta del tunnel a nulla tranne a localhost.
Abilitazione di GatewayPorts
remotey$ grep GatewayPorts /etc/ssh/sshd_config
#GatewayPorts no
Per abilitarlo, modifica questo file /etc/ssh/sshd_config
:
GatewayPorts clientspecified
E riavvia sshd
:
remotey$ sudo service sshd restart
Ora riprova e dovremmo vedere l'effetto che stiamo cercando:
lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey
E ricontrolla questa volta sul telecomando:
remotey$ netstat -anp | grep 12345
tcp 0 0 192.168.1.3:12345 0.0.0.0:* LISTEN 9333/sshd
NOTA: In quanto sopra possiamo vedere che il sshd
processo ora è in ascolto sull'interfaccia che ha l'indirizzo IP 192.168.1.3, per le connessioni sulla porta 12345.
Test della connessione (parte deux)
Ora con la nostra configurazione modificata quando lo testiamo questa volta. La differenza principale è che non dobbiamo più collegarci a localhost!
accedere remotey
[user@lappy ~]$ ssh remotey
testare la connessione inversa
[user@remotey ~]$ ssh -p 12345 remotey
ora dovrebbe essere tornato a ridere
root@remotey's password:
Last login: Wed Aug 21 01:49:10 2013 from remotey
[user@lappy ~]$
Riferimenti