ServerAliveCountMax dans SSH

25

Que fait réellement le ServerAliveCountMax dans SSH?

J'essaie de m'assurer que lorsque je me connecte à mon serveur via SSH que la connexion reste ouverte pendant une longue période au lieu de la connexion s'éteint après une courte période d'inactivité. Voici l'exemple

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 2

J'ai entendu d' une source que le paramètre ci-dessus enverra toujours une réponse au serveur toutes les 60 secondes tant que le serveur reçoit cette réponse. Cependant, si pour une raison quelconque la réponse ne parvient pas au serveur, il essaiera d'envoyer un autre message. Si ce message échoue également, il fermera la connexion. (Je sens que c'est faux)

Les deuxième et troisième sources disent cependant quelque chose de différent. Ils prétendent qu'un message sera envoyé au serveur toutes les 60 secondes s'il y a une période d'inactivité, mais il n'enverra que 2 demandes, puis il fermera la connexion.

Alors, que fait exactement ServerAliveCountMax?

John Crawford
la source

Réponses:

32

Votre sentiment que "c'est faux" est correct. Voir la page de manuel :

 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.
Michael Hampton
la source
3
La page de manuel est prête Intervalà être 0désactivée. Mais il n'est pas clair si vous vous mettez Maxà 0. Cela enverrait-il des pings Alive infinis, ou aucun?
gcb
il n'est pas clair pour moi si la définition de ServerAliveInterval 0 maintiendra la connexion ouverte indéfiniment ou non
Francesco
1
@Francesco Par défaut, la connexion restera ouverte pour toujours, à moins qu'une extrémité ne la ferme explicitement.
Michael Hampton
6

Les messages de serveur vivant sont utiles lorsqu'un serveur SSH a été configuré pour fermer les connexions après une période de temps sans trafic (les fournisseurs d'hébergement Web partagé qui offrent un accès SSH le font presque toujours par exemple). La définition de ces deux options envoie un paquet toutes les ServerAliveIntervalsecondes, pour un maximum de ServerAliveCountMaxtemps, gardant ainsi la session en vie.

Pour répondre aux commentaires sur l'incertitude de définir l'une des options sur 0, j'ai lu le code source de l' opensshimplémentation, et voici ce que je vois ...

  • Le réglage ServerAliveIntervalsur 0n'enverra PAS les paquets, mais il gardera la session active indéfiniment en supposant que la connexion n'est pas interrompue en raison du délai d'expiration TCP et que le serveur n'est pas configuré pour supprimer les clients inactifs.

  • Le réglage ServerAliveCountMaxsur 0a le même effet que le réglage ServerAliveIntervalsur0 .

  • La définition d'une valeur sur une valeur négative ou supérieure à INT_MAX(c.-à-d. 2 147 483 647) entraînera une erreur "valeur entière ..." .

  • Le réglage ServerAliveCountMaxentre INT_MAX/1000+1(c'est-à-dire 2 147 484) à INT_MAX(c'est- à -dire 2 147 483 647) équivaudrait également à définir l'une ou l'autre valeur sur 0.

Donc, en substance, le plus de délais d'attente que vous pouvez obtenir (tout en envoyant les paquets) est INT_MAX/1000(c.-à-d. 2 147 483). Avec un délai d'attente 1et aucun trafic sur les sessions, cela vous donnerait presque 25 jours.

Évidemment, d'autres implémentations de SSH peuvent avoir des résultats différents.

Drew Chapin
la source