ServerAliveCountMax in SSH


25

Cosa fa effettivamente ServerAliveCountMax in SSH?

Sto cercando di assicurarmi che quando mi connetto al mio server tramite SSH la connessione rimanga aperta per un lungo periodo di tempo invece che la connessione muoia dopo un breve periodo di inattività. Questo è l'esempio

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 2

Ho sentito da una fonte che l'impostazione sopra invierà sempre una risposta al server ogni 60 secondi, purché il server riceva quella risposta. Tuttavia, se per qualsiasi motivo la risposta non passa al server, tenterà di inviare un altro messaggio. Se anche quel messaggio fallisce, chiuderà la connessione. (Sento che è sbagliato)

La seconda e la terza fonte tuttavia dicono qualcosa di diverso. Sostengono che un messaggio verrà inviato al server ogni 60 secondi in caso di inattività, ma invierà solo 2 richieste e quindi chiuderà la connessione.

Cosa fa esattamente ServerAliveCountMax?

Risposte:


32

La tua sensazione che "questo sia sbagliato" è corretta. Vedi la pagina man :

 ServerAliveCountMax
         Sets the number of server alive messages (see below) which may be
         sent without ssh(1) receiving any messages back from the server.
         If this threshold is reached while server alive messages are
         being sent, ssh will disconnect from the server, terminating the
         session.  It is important to note that the use of server alive
         messages is very different from TCPKeepAlive (below).  The server
         alive messages are sent through the encrypted channel and there‐
         fore will not be spoofable.  The TCP keepalive option enabled by
         TCPKeepAlive is spoofable.  The server alive mechanism is valu‐
         able when the client or server depend on knowing when a connec‐
         tion has become inactive.

         The default value is 3.  If, for example, ServerAliveInterval
         (see below) is set to 15 and ServerAliveCountMax is left at the
         default, if the server becomes unresponsive, ssh will disconnect
         after approximately 45 seconds.  This option applies to protocol
         version 2 only.

 ServerAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the server, ssh(1) will send a message through
         the encrypted channel to request a response from the server.  The
         default is 0, indicating that these messages will not be sent to
         the server.  This option applies to protocol version 2 only.

3
La pagina man è Intervalpronta per 0disabilitarla. Ma non è chiaro se si imposta Maxsu 0. Manderebbe infiniti ping Alive o nessuno?
gcb,

non mi è chiaro se l'impostazione di ServerAliveInterval 0 manterrà la connessione aperta indefinitamente o no
Francesco

1
@Francesco Per impostazione predefinita, la connessione rimarrà aperta per sempre, a meno che un'estremità non la chiuda esplicitamente.
Michael Hampton

6

I messaggi attivi del server sono utili quando un server SSH è stato configurato per chiudere le connessioni dopo un periodo di tempo senza traffico (ad esempio, i provider di web hosting condivisi che offrono l'accesso SSH lo fanno quasi sempre). L'impostazione di queste due opzioni invia un pacchetto ogni ServerAliveIntervalsecondo, per un massimo di ServerAliveCountMaxvolte, mantenendo così attiva la sessione.

Per rispondere ai commenti sull'incertezza di impostare entrambe le opzioni 0, ho letto il codice sorgente opensshdell'implementazione, ed ecco cosa vedo ...

  • L'impostazione ServerAliveIntervalsu 0NON invierà i pacchetti, ma manterrà la sessione in vita indefinitamente supponendo che la connessione non venga interrotta a causa del timeout TCP e che il server non sia configurato per eliminare i client inattivi.

  • L'impostazione ServerAliveCountMaxsu 0ha lo stesso effetto dell'impostazione ServerAliveIntervalsu 0.

  • L'impostazione di un valore su un valore negativo o maggiore di INT_MAX(ovvero 2.147.483.647) comporterà un errore "valore intero ..." .

  • Anche l'impostazione ServerAliveCountMaxtra INT_MAX/1000+1(ovvero 2.147.484) e INT_MAX(ovvero 2.147.483.647) equivarrebbe a impostare entrambi i valori su 0.

Quindi, in sostanza, il maggior numero di timeout che puoi ottenere (mentre invii ancora i pacchetti) è INT_MAX/1000(cioè 2.147.483). Con un timeout di 1e nessun traffico sulle sessioni, ciò ti richiederebbe quasi 25 giorni.

Ovviamente, altre implementazioni di SSH possono avere risultati diversi.

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.