Il server ssh di Linux non disconnette mai la sessione ssh dal lato server per impostazione predefinita, controlla la configurazione di switch/router/firewall per evitare il problema senza modificare la configurazione di server/client ssh. Se la sessione ssh viene disconnessa a causa dell'inattività e si desidera interromperla, seguire i passaggi seguenti sul lato client o server come descritto di seguito:
Impostazioni lato client
Per abilitare il keep alive a livello di sistema (è richiesto l'accesso come root), modifica il file di configurazione /etc/ssh/ssh_config . Allo stesso modo, per configurare le impostazioni solo per un utente specifico, modifica ~/.ssh/config (creare il file se non esiste). Inserisci quanto segue:
Host * ServerAliveInterval 300 ServerAliveCountMax 2
Queste impostazioni faranno in modo che il client o il server SSH inviino un pacchetto nullo all'altro lato ogni 300 secondi (5 minuti) e rinunceranno se non riceve alcuna risposta dopo 2 tentativi, a quel punto è probabile che la connessione sia stata scartato comunque.
Dalla pagina man di ssh_config:
ServerAliveCountMax:
Imposta il numero di messaggi attivi del server (vedi sotto) che possono essere inviati senza che ssh(1) riceva alcun messaggio dal server. Se questa soglia viene raggiunta durante l'invio di messaggi di server attivi, ssh si disconnetterà dal server, terminando la sessione. È importante notare che l'uso dei messaggi server alive è molto diverso da TCPKeepAlive (sotto). I messaggi in tempo reale del server vengono inviati tramite il canale crittografato e pertanto non saranno contraffatti. L'opzione TCP keep-alive abilitata da TCPKeepAlive è falsificabile. Il meccanismo del server attivo è prezioso quando il client o il server dipendono dal sapere quando una connessione è diventata inattiva.
Il valore predefinito è 3. Se, ad esempio, ServerAliveInterval (vedi sotto) è impostato su 15 e ServerAliveCountMax viene lasciato al valore predefinito, se il server non risponde, ssh si disconnetterà dopo circa 45 secondi. Questa opzione si applica solo al protocollo versione 2; nella versione 1 del protocollo non esiste alcun meccanismo per richiedere una risposta dal server ai messaggi attivi del server, quindi la disconnessione è responsabilità dello stack TCP.
Intervallo ServerAlive:
Imposta un intervallo di timeout in secondi dopo il quale se non sono stati ricevuti dati dal server, ssh(1) invierà un messaggio attraverso il canale crittografato per richiedere una risposta dal server. Il valore predefinito è 0, a indicare che questi messaggi non verranno inviati al server o 300 se è impostata l'opzione BatchMode. Questa opzione si applica solo al protocollo versione 2. ProtocolKeepAlives e SetupTimeOut sono alias di compatibilità specifici di Debian per questa opzione.
Impostazione lato server
Se si dispone dell'accesso come amministratore al server, è possibile configurare le opzioni ClientAliveInterval, TCPKeepAlive e ClientAliveCountMax nel file di configurazione SSHd. Il percorso del file è /etc/ssh/sshd_config
# vi /etc/ssh/sshd_config ClientAliveInterval 30 TCPKeepAlive yes ClientAliveCountMax 99999
Sarà necessario riavviare il server SSH per rendere effettive le modifiche.
# service sshd restart