In /etc/ssh/sshd
per Computer B impostato:
AllowTcpForwarding yes
TCPKeepAlive yes
Dal computer A :
$ ssh -R 2222:localhost:22 ip.of.computer.b
Dal computer B :
$ ssh localhost -p 2222
Si noti che 2222 è un numero arbitrario ad alta porta che ho scelto. Quella porta sul Computer B verrà quindi rimessa in tunnel attraverso la connessione SSH inizializzata sul Computer A sulla porta 22. Se si dispone di più macchine, è necessario utilizzare una porta diversa per ogni macchina.
Per il tuo caso d'uso vorrai probabilmente eseguirlo da uno script in modo da poterlo rendere un demone e provare periodicamente a riconnetterti se il collegamento viene eliminato. Probabilmente vorrai un account speciale con una shell di solo /bin/true
sul computer B per gestire le connessioni in entrata. È quindi possibile impostare un singolo tasto o più tasti per ciascun computer a cui è consentito "chiamare home".
Su computer A si potrebbe trovare il -n
, -N
e -T
opzioni utili per scollegarlo dalla ingresso locale (in modo che possa essere eseguito in background), non cercare di eseguire qualsiasi comando a distanza, basta aprire il tunnel, e non creare un TTY.
I metodi più normali per generare un demone non funzionano molto bene con la creazione di un tunnel di rete come questo. Un problema di connettività di rete proverebbe a tentare di abbattere il muro per attraversarlo. Un semplice ciclo con un sonno da attendere dovrebbe fare il trucco. Dieci minuti sono un bel numero perché non inondano la rete e registrano i file con tentativi se c'è un problema (come il Computer B non è in linea) ma ti riporta comunque abbastanza velocemente se la connessione viene interrotta.
#/bin/sh
while true; do
sleep $((60*10))
ssh -nNT -R 2222:localhost:22 ip.of.computer.b
done
Uno script del genere può essere eseguito avviato all'avvio /etc/rc.local
. Il tuo primo cambiamento di accedere nella macchina inizierà circa dieci minuti dopo che i computer A stivali.