il terminale si blocca quando si perde la connessione e ssh è attivo


18

quando utilizzo un server su Internet in una scheda terminale di gnome, se ho perso la connessione internet, la scheda terminale si bloccherà e non accetterò alcun input. Perché è appeso?

Esiste un modo per attivare la scheda del terminale, ovvero farla continuare a eseguire il processo di shell locale?

Chiudere la linguetta del terminale è l'unico modo?

Risposte:


20

Connessione SSH scende automaticamente dopo un determinato periodo di tempo impostato da ClientAliveIntervale ClientAliveCountMaxparametri e le loro equivalenti sul lato client. Se questi timeout sono piuttosto elevati, si verificherà un guscio congelato. Tuttavia, se lo usi OpenSSHnon devi aspettare un timeout e puoi forzare la chiusura di una connessione usando i caratteri di escape :

ESCAPE CHARACTERS
When a pseudo-terminal has been requested, ssh supports a number
of functions through the use of an escape character.  A single
tilde character can be sent as ~~ or by following the tilde by a
character other than those described below. The escape character
must always follow a newline to be interpreted as special. The
escape character can be changed in configuration files using the
EscapeChar configuration directive or on the command line by the
-e option.
The supported escapes (assuming the default ‘~’) are:

~.
    Disconnect.
(...)

Quando la connessione si blocca, premere ~(ovvero Shift+ `tasti insieme), rilasciarlo e premere .. In alternativa, se lavori con una connessione instabile o devi essere connesso al server remoto per tutto il tempo che puoi usare autossh per rinnovare automaticamente la connessione persa, è molto conveniente.

MODIFICA :

Tuttavia, se entrambi ClientAliveIntervaleServerAliveInterval sono impostati su 0 in modo esplicito o non sono impostati in modo esplicito e sono quindi impostati su 0 per impostazione predefinita in base a sshd_confige ssh_configpagine man, le impostazioni di timeout sono impostate nei seguenti file (da http://tldp.org/HOWTO/TCP- Keepalive-HOWTO / usingkeepalive.html ):

  # cat /proc/sys/net/ipv4/tcp_keepalive_time
  7200

  # cat /proc/sys/net/ipv4/tcp_keepalive_intvl
  75

  # cat /proc/sys/net/ipv4/tcp_keepalive_probes
  9

  The first two parameters are expressed in seconds, and the last is
  the pure number. This means that the keepalive routines wait for
  two hours (7200 secs) before sending the first keepalive probe,
  and then resend it every 75 seconds. If no ACK response is
  received for nine consecutive times, the connection is marked as
  broken.

Puoi modificare questi 3 file semplicemente usando echo e vedi te stesso che una sessione SSH congelata viene disconnessa in base a questi valori.


6
Vorrei aggiungere che ssh riconosce solo il suo carattere di escape inizialmente, o dopo un Invio. Quando una connessione ssh si blocca, Invio è spesso ma non sempre l'ultimo carattere che hai premuto in precedenza. Quindi è probabilmente meglio abituarsi Enter ~ .come sequenza che termina la connessione.
egmont,

Grazie. Non sono ancora chiaro come /proc/sys/net/ipv4/tcp_keepalive*file e ClientAliveIntervale come ServerAliveInterval lavorare insieme? Sono tutti per le stesse impostazioni, cioè per mantenere viva la connessione ssh? I file precedenti non sono solo per connessioni ssh ma anche per altre connessioni TCP?
StackExchange per tutto il

Un'altra domanda: perché "Se questi timeout sono piuttosto alti, si verificherà una shell congelata". Cosa intendi con "time out piuttosto alti"? La shell non è sempre congelata, se la mancanza di attività per il periodo di tempo specificato? o intendi in alcuni casi di mancanza di attività, la shell non è congelata ma esce automaticamente?
StackExchange per tutto il

@Tim: 1. /proc/sys/net/ipv4/tcp_keepalive*Non sono solo per, ssh(d)ma come dice nel documento che ho collegato a:Remember that keepalive support, even if configured in the kernel, is not the default behavior in Linux. Programs must request keepalive control for their sockets using the setsockopt interface. There are relatively few programs implementing keepalive, but you can easily add keepalive support for most of them following the instructions explained later in this document.
Arkadiusz Drabczyk,

@Tim: 2. Abbastanza alto significa, ad esempio, 2 ore - dovrai aspettare 2 ore prima che la sessione venga disconnessa. Fai un test - connettiti con un host remoto, uccidi sshdsul telecomando o rimuovi un cavo e controlla quando una sessione congelata ssh uscirà da sola. Con frozen shellI shell mezzo che non è attiva, non prende alcun tasto e non stampa nulla.
Arkadiusz Drabczyk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.