Quando ci connettiamo tramite ssh ad un server remoto, nella maggior parte dei casi la connessione viene terminata dopo un periodo di inattività (idle), e siamo quindi costretti a riconnetterci al server.
La disconnessione può essere dovuta ad una serie di ragioni; la più verosimile, nel caso di inattività, è quella che un nodo intermedio abbatta la connessione (trascorso un certo periodo di tempo il cui il traffico scambiato è nullo) per mantenere basso il numero di connessioni (e quindi risparmiare risorse). Questo comportamento è perfettamente legittimo (quasi tutti i dispositivi e i provider implementano questa funzionalità).
Possiamo però evitare questo comportamento abilitando il keepalive di SSH. facendo in modo che SSH scambi del traffico “fittizio” quando la connessione non sta scambiando dati, in modo che la connessione non venga abbattuta. Nota: questa funzionalità è disabilitata di default da ssh.
Abilitare questo comportamento è molto semplice, e può essere ottenuto in due modi:
- Se vogliamo abilitare il keepalive per tutti gli utenti, dovremo avere accesso root alla macchina. Modifichiamo il file
/etc/ssh/ssh_config
e aggiungiamo queste righe:
ClientAliveInterval 300
ClientAliveCountMax 1000 - Se vogliamo abilitare il keepalive solo per l’utente corrente, modifichiamo il file
~/.ssh/config
e aggiungiamo queste righe:
ClientAliveInterval 300
ClientAliveCountMax 1000
In questo modo, il server ssh invierà un messaggio di keep-alive nel caso in cui la connessione ssh non scambi dati per 5 minuti (300 secondi), e ripeterà l’invio per massimo 1000 volte.
I like it!!!