2010-01-20 23:33:01 +0000 2010-01-20 23:33:01 +0000
236
236

Come evitare il timeout della connessione ssh e il congelamento del terminale GNOME

Quando mi connetto via ssh a certi server, va in timeout e “congela” il terminale (non accetta input, non si disconnette, non può fare Ctrl-C per uccidere il processo ssh o altro).

Questo è in gnome-terminal di Ubuntu anche se sembra mettere in pausa l'input/output del terminale, e non influisce sul funzionamento del software GNOME Terminal stesso. Quindi meno un bug con gnome-terminal che una fastidiosa incongruenza con ssh.

Quindi, c'è un modo per prevenire/riprendere il terminale dalle connessioni ssh che sono scadute?

Risposte (7)

259
259
259
2010-01-20 23:53:48 +0000

sshd (il server) chiude la connessione se non sente nulla dal client per un po’. Puoi dire al tuo client di inviare un segnale di vita al server una volta ogni tanto.

La configurazione per questo è nel file ~/.ssh/config. Per inviare il segnale ogni quattro minuti a remotehost, metti quanto segue nel tuo ~/.ssh/config.

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

Questo è quello che ho nel mio ~/.ssh/config.

Per abilitarlo per tutti gli host usate:

Host *
  ServerAliveInterval 240

Assicurati anche di eseguire chmod 600 ~/.ssh/config, perché il file di configurazione non deve essere leggibile dal mondo.

250
250
250
2010-01-20 23:44:01 +0000

Premete Invio, ~, . uno dopo l'altro per disconnettervi da una sessione congelata.

La sezione “ESCAPE CHARACTERS” nella pagina man di ssh spiega i dettagli sottostanti.

39
39
39
2012-07-03 01:28:14 +0000

Anche se questa non è una risposta diretta alla tua domanda, è altamente correlata al problema che hai. Invece di cercare di mantenere viva la connessione (tutte le connessioni alla fine muoiono) puoi usare multiplexor di terminale, come screen e tmux che mantengono viva la sessione in background anche se il tuo terminale si disconnette.

Essenzialmente quando ti connetti al server SSH esegui immediatamente screen che creerà e collegherà una nuova sessione:

$ screen

Poi vai avanti e fai il tuo lavoro con la shell come faresti normalmente. Ora, se la connessione cade, quando potete tornare online e riconnettervi al server tramite SSH, otterrete un elenco delle sessioni correnti con:

$ screen -ls

Per riconnettersi a una sessione:

$ screen -r <session>

dove <session> è il PID o il nome della sessione. Sarai ricollegato alla tua sessione e potrai continuare da dove hai lasciato!

Puoi anche staccare la sessione e riconnetterti da casa per riprendere dal punto esatto in cui hai lasciato. Per staccare la sessione si usa C-a seguito da C-d (cioè Control + A e poi Control + D).

C'è anche un semplice tutorial online .

Usare screen e tmux sui server remoti è considerato una migliore pratica ed è altamente raccomandato. Alcune persone arrivano al punto di avere screen come shell di default per il login, così quando si connettono iniziano immediatamente una nuova sessione screen.

12
12
12
2014-02-06 14:13:27 +0000

Prova ad aggiungere -o ServerAliveInterval=30 alla tua stringa di connessione (30 significa 30 secondi e può ovviamente essere regolato)

6
6
6
2016-02-12 22:45:27 +0000

Puoi anche impostare un intervallo di timeout inattivo dal lato server SSH:

File: /etc/ssh/ssh_config

Content:

ClientAliveInterval XX
ClientAliveCountMax YY

Questo funziona esattamente come l'impostazione del client, ma i pacchetti null sono inviati dal server, piuttosto che dal client.

Estratto da: http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html

2
2
2
2015-12-17 02:19:43 +0000

Per le persone che vogliono evitare che il client si spenga in primo luogo.

Si potrebbe provare a impostare ConnectTimeout 0 nel file di configurazione. Il valore 0 significa che la connessione sarà tenuta in vita indefinitamente a meno che non venga chiusa.

il tuo file di configurazione (o ssh_config) potrebbe essere come questo:

Host *
   ConnectTimeout 0
0
0
0
2020-01-24 11:55:41 +0000

Nel mio caso il problema era nella grande dimensione MTU. Puoi cambiare l'MTU sul router se usi il NAT, ma io cambio l'MTU sul server:

sudo /sbin/ifconfig eth0 mtu 1036
sudo /etc/init.d/networking restart

Su Windows puoi anche aumentare questo tasto:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpMaxDataRetransmissions"=dword:00000010