59 votes

ServerAliveCountMax dans SSH

Que fait la fonction ServerAliveCountMax dans SSH ?

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

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 2

J'ai entendu parler de une source que le paramètre ci-dessus enverra toujours une réponse au serveur toutes les 60 secondes tant que le serveur recevra cette réponse. Toutefois, si, pour une raison quelconque, la réponse n'est pas transmise au serveur, celui-ci essaiera d'envoyer un autre message. Si ce message échoue également, la connexion est fermée. (J'ai l'impression que ce n'est pas correct)

Les deuxième y troisième Les sources d'information de la Commission européenne disent cependant autre chose. Ils affirment qu'un message sera envoyé au serveur toutes les 60 secondes s'il y a une période d'inactivité, mais qu'il n'enverra que deux requêtes et fermera ensuite la connexion.

Que fait exactement ServerAliveCountMax ?

58voto

Michael Hampton Points 232226

Vous avez raison de penser que "ce n'est pas bien". 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.

31voto

Drew Chapin Points 571

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). Le paramétrage de ces deux options permet d'envoyer un paquet tous les ServerAliveInterval secondes, pour un maximum de ServerAliveCountMax fois, ce qui permet de maintenir la session en vie.

Pour répondre aux commentaires concernant l'incertitude liée à la fixation de l'une ou l'autre option à 0 J'ai lu le code source de l'application openssh et voici ce que je vois...

  • Paramètres ServerAliveInterval a 0 n'enverra PAS les paquets, mais maintiendra la session en vie indéfiniment en supposant que la connexion n'est pas interrompue en raison d'un dépassement de délai TCP et que le serveur n'est pas configuré pour abandonner les clients inactifs.

  • Paramètres ServerAliveCountMax a 0 a le même effet que le réglage de ServerAliveInterval a 0 .

  • En fixant l'une ou l'autre valeur à une valeur négative ou supérieure à INT_MAX (c'est-à-dire 2 147 483 647) se traduira par une augmentation de 1,5 million d'euros. "valeur entière..." erreur.

  • Paramètres ServerAliveCountMax entre INT_MAX/1000+1 (c'est-à-dire 2 147 484) à INT_MAX (c'est-à-dire 2 147 483 647) équivaudrait également à fixer l'une ou l'autre valeur à 0 .

Ainsi, en substance, le maximum de délais d'attente que vous pouvez obtenir (tout en continuant à envoyer les paquets) est de INT_MAX/1000 (soit 2 147 483). Avec un délai de 1 et qu'il n'y ait pas de trafic sur les sessions, cela vous donnerait presque 25 jours.

Il est évident que d'autres implémentations de SSH peuvent donner des résultats différents.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X