Qual è il timeout di inattività predefinito per OpenSSH?


25

Non riesco a trovare una risposta a questa semplice domanda, di cui ho bisogno per alcuni documenti sulla conformità.

Su un'installazione predefinita di CentOS 6.5 (OpenSSH 5.3p1-94.el6), dopo quanto tempo di inattività verrà terminata la sessione SSH di un utente? Credo che si possa impostare quanto segue per aumentare il timeout di inattività, ma sono commentati per impostazione predefinita.

$ grep -i alive /etc/ssh/sshd_config
#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

Inoltre, esiste un comando per scaricare un elenco delle sshdimpostazioni correnti ? Non vedo nulla dentro man sshd.


3
Alcune shell possono essere impostate per uscire dopo un timeout. Ciò causerebbe la chiusura della sessione ssh. Controlla se la tua variabile d'ambiente TMOUT è impostata.
Kenster,

Risposte:


23

Le righe commentate in sshd_configgenere mostrano i valori predefiniti. Questo è il caso di tutte le righe della tua domanda. Puoi verificarlo nella sshd_configmanpage . Ecco i frammenti rilevanti:

TCPKeepAlive

      Specifica se il sistema deve inviare messaggi keepalive TCP dall'altro lato. Se vengono inviati, verrà notata correttamente la morte della connessione o l'arresto anomalo di una delle macchine. Tuttavia, ciò significa che le connessioni moriranno se il percorso è temporaneamente inattivo e alcune persone lo trovano fastidioso. D'altra parte, se i keepalive TCP non vengono inviati, le sessioni potrebbero bloccarsi indefinitamente sul server, lasciando utenti "fantasma" e consumando risorse del server.

      L'impostazione predefinita è "sì" (per inviare messaggi keepalive TCP) e il server noterà se la rete si interrompe o l'host client si arresta in modo anomalo. Questo evita sessioni sospese all'infinito.

      Per disabilitare i messaggi keepalive TCP, il valore deve essere impostato su "no".

      Questa opzione era precedentemente chiamata KeepAlive.

ClientAliveCountMax

      Imposta il numero di messaggi attivi del client (vedere di seguito) che possono essere inviati senza che sshd (8) riceva alcun messaggio dal client. Se questa soglia viene raggiunta durante l'invio di messaggi attivi client, sshd disconnetterà il client, terminando la sessione. È importante notare che l'uso di messaggi attivi client è molto diverso daTCPKeepAlive (sotto)(sopra). I messaggi attivi del client vengono inviati attraverso il canale crittografato e pertanto non saranno falsificabili. L'opzione keepalive TCP abilitata da TCPKeepAliveè spoofable. Il meccanismo attivo del client è prezioso quando il client o il server dipendono dal sapere quando una connessione è diventata inattiva.

      Il valore predefinito è 3. Se ClientAliveInterval(vedere di seguito) è impostato su 15 e ClientAliveCountMaxviene lasciato sul valore predefinito, i client SSH che non rispondono verranno disconnessi dopo circa 45 secondi. Questa opzione si applica solo alla versione 2 del protocollo.

ClientAliveInterval

      Imposta un intervallo di timeout in secondi dopo il quale, se non sono stati ricevuti dati dal client, sshd (8) invierà un messaggio attraverso il canale crittografato per richiedere una risposta dal client. Il valore predefinito è 0, a indicare che questi messaggi non verranno inviati al client. Questa opzione si applica solo alla versione 2 del protocollo.


1
Correggimi se sbaglio, ma se non ci fosse un firewall tra me e la macchina (con configurazioni predefinite), non sarei mai disconnesso? So che il nostro firewall interrompe le connessioni TCP inattive dopo 60 minuti, quindi è qui che avvengono le connessioni inattive di chiusura. Volevo solo controllare e vedere se OpenSSH stesso chiude esplicitamente le sessioni. Penso che la risposta sia No, openssh non chiude esplicitamente le connessioni inattive, ma in genere i firewall lo fanno. Le impostazioni menzionate nella tua risposta aiutano effettivamente a mantenere la connessione o a terminare correttamente la sessione se vede che è stata interrotta.
Banjer,

2
Il testo citato dice che il valore predefinito per ClientAliveInterval è 0, il che significa che non definisce un intervallo di tempo per il quale una connessione rimane aperta. Eppure sappiamo che l'intervallo di tempo ha un valore finito per impostazione predefinita. Pertanto sembra che ci debba essere qualche altro parametro che imposta per quanto tempo la connessione rimane aperta per impostazione predefinita. Se la mia analisi sopra è corretta, supponiamo che sia il server che il client siano macchine linux che eseguono openssh ed entrambi stiano utilizzando tutte le impostazioni predefinite. In questo caso, da quale parte viene impostato il valore predefinito, qual è il suo valore e dove viene impostato?
Ben Crowell,

2
@BenCrowell Eppure sappiamo che l'intervallo di tempo ha un valore finito di default. Quale intervallo di tempo e come lo sai?
Piotr Dobrogost,


6

OpenSSH non terminerà una sessione della shell inattiva da un po 'di tempo. Questo non è qualcosa che OpenSSH fa. La conclusione di una sessione di shell inattiva non è correlata alla configurazione di OpenSSH.

Le impostazioni visualizzate sono correlate ai timeout quando la connessione si interrompe e non sono correlate alla shell sull'host remoto e a ciò che l'utente sta facendo o non sta facendo.

La shell dell'host remoto potrebbe terminare (o essere uccisa da qualche altro processo) dopo un po 'di inattività, ma questo non è correlato alla configurazione del servizio SSH sul server e sul client SSH.

Relazionato:


Per scaricare la sshdconfigurazione, utilizzare la "modalità test estesa" come root:

sshd -T

Questo è documentato nella del sshd(8)manuale (guardando OpenSSH_7.7, LibreSSL 2.7.2su OpenBSD qui):

-T

Modalità test estesa. Verifica la validità del file di configurazione, invia la configurazione effettiva su stdout e quindi esci . Facoltativamente, è possibile applicare le regole di corrispondenza specificando i parametri di connessione utilizzando una o più -Copzioni.

Questa opzione è stata aggiunta a sshdOpenSSH 5.1 / 5.1p1 nel 2008.


3

Se il requisito è chiudere la connessione SSH dopo un periodo di inattività, le shell stesse forniscono variabili di timeout.

Per bash:

TMOUT: se impostato su un valore maggiore di zero, TMOUT viene considerato come timeout predefinito per l'integrato letto. Il comando select termina se l'ingresso non arriva dopo TMOUT secondi quando l'ingresso proviene da un terminale. In una shell interattiva, il valore viene interpretato come il numero di secondi di attesa dell'input dopo l'emissione del prompt primario. Bash termina dopo aver atteso quel numero di secondi se l'input non arriva.

prova eseguendo TMOUT=10e attendi 10 secondi per chiudere la connessione.

Per tcsh:

La variabile di shell autologout può essere impostata per disconnettersi o bloccare la shell dopo un determinato numero di minuti di inattività.

In tcsh, la sintassi per impostare il timeout per dieci minuti è set autologout=10. Questo non funziona nel csh originale.


-2

Se vuoi che il timeout sia di 10 secondi per tutti, procedi come segue per la configurazione del server (sshd_config):

ClientAliveInterval 10
ClientAliveCountMax 0

Se si desidera che il timeout sia di 10 secondi per i client locali, procedere come segue per la configurazione del client (ssh_config):

ServerAliveInterval 10
ServerAliveCountMax 0

Se il parametro AliveCountMax è diverso da zero, probabilmente non funzionerà perché il server risponderà reimpostando il timer (a meno che non ci sia un problema di connessione). Puoi vederlo eseguendo il client ssh con il debug attivato.

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.