GNU/Linux >> Linux Esercitazione >  >> Linux

Come impedire a SSH di disconnettersi se è rimasto inattivo per un po'

Per chiarire:sto cercando una soluzione che avvii una volta dopo aver effettuato l'accesso, quindi voglio utilizzare quel terminale, andarmene, tornare due ore dopo e continuare a lavorare, senza digitare nulla prima di andarmene.

Il problema è che c'è qualcosa (di solito un firewall o un bilanciamento del carico), che sta eliminando le sessioni inattive. Se configuri i keepalive della sessione, i keepalive impediranno ai dispositivi di rete di considerare la sessione come inattiva.

Correzione Linux/Unix/Cygwin OpenSSH :
La soluzione più semplice è abilitare i keepalive del client ssh; questo esempio invierà un keepalive ssh ogni 60 secondi:

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>

Se vuoi abilitarlo su tutte le tue sessioni, inseriscilo nel tuo /etc/ssh/ssh_config o ~/.ssh/config :

ServerAliveInterval 60

Per ulteriori informazioni, vedere il ssh_config manpage

Mastice Fix :

Salvalo nelle "Impostazioni predefinite" di PuTTY...

  • Fai clic su Connessione
  • Digita 60 in "Secondi tra keepalive"


Oltre alla risposta di Mike Pennigton, vorrei metterti al corrente di ServerAliveCountMax anche.

  • Il ServerAliveInterval invierà un keepalive ogni x secondi (il valore predefinito è 0 , che disabilita questa funzione se non è impostata su qualcos'altro).
  • Questo sarà fatto ServerAliveCountMax volte se non si riceve risposta. Il valore predefinito di ServerAliveCountMax è 3 (vedi manpage ssh_config).

Esempio:se imposti ServerAliveInterval a 60 e lasciare ServerAliveCountMax così com'è, questo significa che il keepalive aspetterà solo 3 * 60 = 180 seconds = 3 minuti prima di uscire.

Per aumentare questo ad es. 2 ore di tentativi per mantenere viva la connessione, puoi fare:

Per comando:

Pertanto dovresti considerare di impostare

ssh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 120" <SERVER_ADDRESS>

Persistente:

Per renderlo persistente scrivilo a /etc/ssh/ssh_config (si applicherà a tutto il sistema) o ~/.ssh/config (si applicherà solo all'utente):

ServerAliveInterval 60
ServerAliveCountMax 120

Nota

Come ha correttamente sottolineato dislick, questo potrebbe non essere quello che desideri, a seconda della tua situazione:

  • Se desideri terminare rapidamente la sessione non appena il server non risponde più, dovresti scegliere un valore basso per ServerAliveCountMax .
  • Se sei più interessato a mantenere una connessione già stabilita (ad es. vai in treno e hai una latenza elevata), dovresti scegliere un valore più alto per ServerAliveCountMax per consentire ssh per continuare a tentare di ristabilire la connessione.

Vedi anche:

  • unix.stackexchange.com - Qual è il timeout di inattività predefinito per OpenSSH?

Sto usando Mobaxterm e ho anche riscontrato questo problema. Mobaxterm viene fornito anche con un'opzione per mantenere attivo il client quando il client è inattivo. Vai a Settings -> Configuration -> SSH . C'è una sezione intitolata SSH settings , seleziona l'opzione SSH keepalive . Quindi il problema dovrebbe scomparire.


Linux
  1. Come rilevare se la shell è controllata da Ssh?

  2. Journalctl:come impedire il troncamento del testo nel terminale?

  3. Come impedire a `ls` di ordinare l'output?

  4. Come impedire a un processo di scrivere file

  5. Come configurare D-Bus e SSH X-Forwarding per evitare che SSH si blocchi all'uscita?

Come impostare l'autenticazione a più fattori per SSH in Linux

Come prevenire il timeout di SSH

Come SSH nel tuo server Linux da Windows

Come eseguire SSH in WSL2 su Windows 10 da un computer esterno

Come eseguire SSH in una macchina Windows 10 da Linux O Windows O ovunque

Come impedire la disconnessione delle connessioni SSH a causa dell'inattività quando si utilizza MobaXterm