Se utilizzi SSH per connetterti a server Linux remoti, noterai che se mantieni la tua sessione SSH inattiva per un po' di tempo e poi provi a usarla di nuovo, la sessione SSH si disconnette con un messaggio di errore come questo:
:client_loop: send disconnect: Broken pipe
Su alcuni sistemi, visualizzerà "Scrittura non riuscita:pipe rotta" o "Connessione chiusa da host remoto".
Vediamo cosa causa questo errore e come mantenere attiva la tua connessione SSH.
Risolto errore di pipe rotta con SSH
Come avrai intuito, la connessione SSH è chiusa per inattività. Non esiste un valore impostato, ma di solito è di circa 5 minuti.
Quello che puoi fare per evitare la disconnessione della sessione SSH è inviare un "messaggio attivo" dal server al client (ClientAliveInterval
) o da client a server (ServerAliveInterval
) a un determinato intervallo di tempo.
In questo modo, mantieni attiva la sessione SSH perché c'è una comunicazione tra il client e il server e il server capisce che il client è ancora lì.
Ora, ci sono due modi per farlo. O invii il messaggio vivo dal client al server o dal server al client.
- Se ti connetti a più server tramite SSH, impostalo sul tuo computer.
- Se sei un amministratore di sistema e molti utenti si lamentano della frequente disconnessione della connessione SSH, puoi impostarla sul server.
Metodo 1:modifica della configurazione SSH lato client
Supponiamo che tu voglia mantenere attiva la tua connessione SSH con un massimo di 10 minuti (600 secondi) di inattività.
Durante la connessione al sistema Linux remoto tramite SSH, puoi menzionare il ServerAliveInterval
valore come questo:
ssh -o ServerAliveInterval=600 [email protected]_ip_address
Ora, questa cosa funziona ma inserire manualmente questa opzione ogni volta che ti connetti al server è noioso. Perché non renderlo permanente?
Spero che tu sia a conoscenza dei file di configurazione SSH. Sul lato client, puoi sfruttarlo per impostare determinati parametri SSH per connessioni specifiche o per tutte. Ho spiegato in dettaglio il file di configurazione SSH qui.
Innanzitutto, assicurati di avere il file di configurazione ssh. In caso contrario crealo:
touch ~/.ssh/config
È importante dargli i permessi di file corretti altrimenti ti verrà negato l'errore di autorizzazione durante la connessione tramite SSH.
Usa il comando chmod e aggiungi la seguente autorizzazione al file:
chmod 600 ~/.ssh/config
Se ti senti pigro o non vuoi entrare nei dettagli, usa questo comando per impostare l'intervallo di vita su 600 secondi (10 minuti):
echo "ServerAliveInterval 600" >> ~/.ssh/config
Questo imposterà il valore ServerAliveInterval su 10 minuti per tutte le connessioni SSH che utilizzerai. Provalo se vuoi.
Se vuoi renderlo più appropriato, dovresti aggiungerlo in questo modo:
Host *
ServerAliveInterval 600
Metodo 2:modifica della configurazione SSH lato server
Il file di configurazione SSH per il server si trova solitamente in /etc/ssh/sshd_config.
Se apri questo file, qui troverai due parametri di interesse:
ClientAliveInterval
: Questo è il periodo di inattività dopo il quale il server invierà un messaggio vivo al client connesso ssh.ClientAliveCountMax
:Questo è il numero di tentativi che il server farà per inviare il messaggio attivo.
Supponiamo di impostare ClientAliveInterval
a 200 secondi e ClientAliveCountMax
a 3. Ciò significa che il server invierà un messaggio attivo dopo 200 secondi. Se non c'è attività dal client, invierà nuovamente un messaggio attivo a 400 secondi. Nessuna risposta/attività dal client e un altro messaggio attivo viene inviato a 600 secondi. Dopo questo (600 secondi) la connessione SSH viene disconnessa.
Puoi modificare il /etc/ssh/sshd_config
file nel tuo editor di testo basato su terminale preferito come Vim. Cerca le voci ClientAliveInterval e ClientAliveCountMax. Rimuovi il tasto # all'inizio delle righe e assegna loro il valore appropriato.
Salva ed esci dal file.
Si prega di non impostare il timeout della connessione SSH su diverse ore. Sarebbe uno spreco di risorse.
Spero che questo tutorial ti abbia aiutato a risolvere il problema di errore del tubo rotto con la connessione SSH. Il tuo feedback è il benvenuto.