Follow-up: sembra che la rapida serie di disconnessioni che coincidono con alcuni mesi di funzionamento di ciascun server sia probabilmente casuale e servita a rivelare il problema reale. Il motivo per cui non è stato possibile riconnettersi è quasi certamente dovuto ai valori AliveInterval (risposta di kasperd). L'uso dell'opzione ExitOnForwardFailure dovrebbe consentire il timeout corretto prima di ricollegarsi, il che dovrebbe risolvere il problema nella maggior parte dei casi. Il suggerimento di MadHatter (il kill script) è probabilmente il modo migliore per assicurarsi che il tunnel possa riconnettersi anche se tutto il resto fallisce.
Ho un server (A) dietro un firewall che avvia un tunnel inverso su più porte verso un piccolo VPS DigitalOcean (B), così posso collegarmi ad A tramite l'indirizzo IP di B. Il tunnel ha funzionato costantemente per circa 3 mesi, ma è improvvisamente fallito quattro volte nelle ultime 24 ore. La stessa cosa è successa un po 'di tempo fa su un altro provider VPS: mesi di funzionamento perfetto, poi improvvisamente molteplici guasti rapidi.
Ho uno script sulla macchina A che esegue automaticamente il comando tunnel ( ssh -R *:X:localhost:X address_of_B
per ogni porta X) ma quando viene eseguito, diceWarning: remote port forwarding failed for listen port X
.
Accedere /var/log/secure
a sshd sul server mostra questi errori:
bind: Address already in use
error: bind: Address already in use
error: channel_setup_fwd_listener: cannot listen to port: X
La risoluzione richiede il riavvio del VPS. Fino ad allora, tutti i tentativi di riconnettersi danno il messaggio "port forwarding remoto fallito" e non funzioneranno. È arrivato al punto in cui il tunnel dura solo circa 4 ore prima di fermarsi.
Non è cambiato nulla sul VPS ed è una macchina monouso e monoutente che funge solo da endpoint del tunnel inverso. Funziona con OpenSSH_5.3p1 su CentOS 6.5. Sembra che sshd non stia chiudendo le porte quando finisce la connessione. Sono in perdita per spiegare perché, o perché sarebbe successo all'improvviso ora dopo mesi di operazioni quasi perfette.
Per chiarire, devo prima capire perché sshd si rifiuta di ascoltare sulle porte dopo il fallimento del tunnel, il che sembra essere causato da sshd che ha lasciato le porte aperte e non le ha mai chiuse. Questo sembra essere il problema principale. Non sono sicuro di cosa potrebbe comportare questo in questo modo dopo mesi di comportamento come mi aspetto (cioè chiudere immediatamente le porte e consentire allo script di riconnettersi).