Domanda correlata: avvia la connessione ssh dal server al client
La risposta da lì mi ha aiutato molto, questo comando fa quello che mi serve:
ssh -R 2225:localhost:22 loginOfServerWithPublicIP@publicIP
Quindi ho scritto la sceneggiatura per riconnettermi tutto il tempo:
#!/bin/bash
while true; do
echo "try to connect..."
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host
echo "restarting in 5 seconds.."
sleep 5
done
E l'ho aggiunto al /etc/crontab
. Ma ho scoperto che funziona se solo lo eseguo "a mano" dalla shell, ma se viene chiamato da cron, ssh si collega e termina immediatamente. (quindi, lo script sopra si riconnette continuamente)
Da man ssh
, ho scoperto che per le connessioni in background dovrei chiamarlo con -n
chiave, ma non ha aiutato. Quindi, ho appena cercato script simili e ho scoperto che funziona se chiamo tail -f something
, cioè un comando "infinito", quindi ho appena creato un file vuoto /tmp/dummy_file
e ora il mio comando ssh è simile al seguente:
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 -n user@host tail -f /tmp/dummy_file
Ora funziona! Ma questa soluzione sembra un po 'brutta, inoltre non capisco davvero le ragioni reali di quel comportamento. Per caso, ho provato a chiamare bash
invece di tail -f
( bash
mi sembra anche il comando "infinito"), ma non funziona.
Quindi, qualcuno potrebbe spiegare questo comportamento, e qual è il modo corretto di creare una connessione ssh in background per mantenere il tunnel ssh inverso?
while
loop verrà eseguito più volte, avviando una nuova ssh
connessione in background ogni 5 secondi, giusto? Questo non è quello di cui ho bisogno.
&
alla fine del tuo comando ssh:ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host &