ServerAliveCountMax in SSH

ServerAliveCountMax in SSH

Was macht der ServerAliveCountMax in SSH eigentlich?

Ich versuche sicherzustellen, dass die Verbindung, wenn ich mich über SSH mit meinem Server verbinde, für einen langen Zeitraum offen bleibt, anstatt nach einer kurzen Zeit der Inaktivität abzubrechen. Dies ist das Beispiel

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 2

Ich habe gehört voneine Quelledass die obige Einstellung immer alle 60 Sekunden eine Antwort an den Server sendet, solange der Server diese Antwort empfängt. Wenn die Antwort jedoch aus irgendeinem Grund nicht an den Server durchgeht, wird versucht, eine weitere Nachricht zu senden. Wenn auch diese Nachricht fehlschlägt, wird die Verbindung geschlossen. (Ich finde, das ist falsch)

DerzweiteUnddritteDie Quelle sagt jedoch etwas anderes. Sie behaupten, dass bei einer Inaktivitätsphase alle 60 Sekunden eine Nachricht an den Server gesendet wird, aber es werden nur zwei Anfragen gesendet und dann die Verbindung geschlossen.

Also, was genau macht ServerAliveCountMax?

Antwort1

Ihr Gefühl, dass „das falsch ist“, ist richtig.Siehe die Manpage:

 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.

Antwort2

Server-Alive-Meldungen sind nützlich, wenn ein SSH-Server so konfiguriert wurde, dass Verbindungen nach einer gewissen Zeit ohne Datenverkehr geschlossen werden (Shared Webhosting-Anbieter, die SSH-Zugriff anbieten, tun dies beispielsweise fast immer). Wenn Sie diese beiden Optionen festlegen, wird ServerAliveIntervalmaximal alle Sekunden ein Paket gesendet, ServerAliveCountMaxsodass die Sitzung aktiv bleibt.

Um die Kommentare zur Unsicherheit beim Setzen einer der beiden Optionen zu beantworten 0, habe ich den Quellcode der opensshImplementierung durchgelesen und Folgendes gesehen …

  • ServerAliveIntervalBei der Einstellung 0werden die Pakete NICHT gesendet, aber die Sitzung bleibt auf unbestimmte Zeit aufrechterhalten, vorausgesetzt, dass die Verbindung nicht aufgrund eines TCP-Timeouts getrennt wird und dass der Server nicht so konfiguriert ist, dass inaktive Clients getrennt werden.

  • Die Einstellung ServerAliveCountMaxauf 0hat dieselbe Wirkung wie die Einstellung ServerAliveIntervalauf 0.

  • Wenn Sie einen der Werte auf einen negativen Wert oder einen Wert größer als INT_MAX2.147.483.647 setzen, wird ein"Integer Wert..."Fehler.

  • Die Einstellung ServerAliveCountMaxzwischen INT_MAX/1000+1(also 2.147.484) und INT_MAX(also 2.147.483.647) wäre auch gleichbedeutend mit der Einstellung eines der beiden Werte auf 0.

Im Wesentlichen beträgt die maximale Anzahl an Timeouts, die Sie erreichen können (während die Pakete noch gesendet werden), INT_MAX/1000also 2.147.483. Bei einem Timeout von 1und ohne jeglichen Verkehr in den Sitzungen würden Sie fast 25 Tage erreichen.

Natürlich können andere Implementierungen von SSH zu anderen Ergebnissen führen.

verwandte Informationen