SSH, come evitare la disconnessione della shell in caso di inattività

Se siete amministratori di sistema, o come me vi trovate a gestire quotidianamente server remoti via SSH vi sarà capitato di aprire una shell, iniziare a lavorare, poi essere distratti da una mail o una telefonata per 5 minuti e, al cambio di contesto, trovare la sessione SSH irrimediabilmente  disconnessa.

SSH Broken Pipe

Il messaggio tipico di errore in questo caso è:


Write Failed: broken pipe

Vediamo, agendo solo sul client SSH, come fare ad evitarlo tramite una banale configurazione da pochi secondi.

Connessioni SSH “immortali”

La soluzione è molto semplice e consiste nel creare un alias del comando ssh in modo che, senza doverlo digitare ad ogni connessione, venga utilizzata l’opzione ServerAliveInterval. Questa opzione consente di esplicitare, in secondi, un periodo trascorso il quale il client invia un pacchetto sulla socket per mantenere la connessione aperta.


echo 'alias ssh="ssh -o ServerAliveInterval=15"' >> ~/.bash_profile

Al riavvio successivo della macchina la configurazione sarà attiva. E’ anche possibile attivarla senza reboot semplicemente forzando il reload del bash_profile con il comando.


. ~/.bash_profile

Questa soluzione è compatibile con tutti i sistemi Unix, e testata personalmente da me su Mac OS X, CentOS, Debian ed Ubuntu. Non ho provato su altre distribuzioni ma non vedo ragioni per cui non dovrebbe funzionare.

ELbuild, gestione server remoti

Avete necessità di un affiancamento nella gestione del vostro parco server o di consulenza sulla razionalizzazione della vostra infrastruttura?

Contattateci ed analizzeremo insieme le vostre necessità e le possibili soluzioni.

Autore: Luca Adamo

Luca Adamo si è laureato con lode in Ingegneria delle Telecomunicazioni all'Università degli studi di Firenze ed è dottorando in Ingegneria Informatica, Multimedialità e Telecomunicazioni, sempre nella stessa facoltà. Le sue competenze tecniche includono lo sviluppo software, sia orientato al web che desktop, in C/C++ e Java (J2EE, J2SE, J2ME), l'amministrazione di macchine Unix-based, la gestione di reti di telecomunicazioni, ed il design di database relazionali.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *