ServerAliveCountMax in SSH

24

Was macht der ServerAliveCountMax in SSH eigentlich?

Ich versuche sicherzustellen, dass beim Herstellen einer Verbindung zu meinem Server über SSH die Verbindung für einen langen Zeitraum geöffnet bleibt, anstatt dass die Verbindung nach einer kurzen Zeit der Inaktivität unterbrochen wird. Dies ist das Beispiel

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 2

Ich habe von einer Quelle gehört, dass 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 gesendet wird, wird versucht, eine weitere Nachricht zu senden. Wenn diese Nachricht ebenfalls fehlschlägt, wird die Verbindung getrennt. (Ich denke das ist falsch)

Die zweite und dritte Quelle sagen jedoch etwas anderes. Sie behaupten, dass alle 60 Sekunden eine Nachricht an den Server gesendet wird, wenn eine Zeit der Inaktivität vorliegt, aber nur zwei Anfragen gesendet werden und dann die Verbindung getrennt wird.

Was genau macht ServerAliveCountMax?

John Crawford
quelle

Antworten:

31

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.
Michael Hampton
quelle
3
Die Manpage ist auf Intervaldas 0Deaktivieren eingestellt. Aber es ist nicht klar , ob Sie setzen Maxauf 0. Würde es unendliche lebendige Pings senden oder keine?
GCB
Mir ist nicht klar, ob die Einstellung von ServerAliveInterval 0 die Verbindung auf unbestimmte Zeit offen hält oder nicht
Francesco,
1
@Francesco Standardmäßig bleibt die Verbindung für immer offen, es sei denn, ein Ende schließt sie explizit.
Michael Hampton
5

Server-Alive-Nachrichten sind nützlich, wenn ein SSH-Server so konfiguriert wurde, dass Verbindungen nach einer bestimmten Zeit ohne Datenverkehr getrennt werden (beispielsweise bei gemeinsam genutzten Webhosting-Anbietern, die SSH-Zugriff anbieten, geschieht dies fast immer). Wenn Sie diese beiden Optionen einstellen ServerAliveInterval, wird maximal alle Sekunden ein Paket gesendet , ServerAliveCountMaxwodurch die Sitzung am Leben bleibt.

Um auf die Kommentare zu der Ungewissheit zu antworten, dass eine der Optionen auf gesetzt ist 0, habe ich den Quellcode der opensshImplementierung durchgelesen und hier ist, was ich sehe ...

  • Durch die Einstellung ServerAliveIntervalauf 0werden die Pakete NICHT gesendet, die Sitzung bleibt jedoch auf unbestimmte Zeit aktiv, vorausgesetzt, die Verbindung wird nicht aufgrund eines TCP-Timeouts getrennt und der Server ist nicht für das Löschen inaktiver Clients konfiguriert.

  • Die Einstellung ServerAliveCountMaxauf 0hat den gleichen Effekt wie die Einstellung ServerAliveIntervalauf 0.

  • Wenn Sie entweder einen negativen Wert oder einen höheren Wert als INT_MAX(dh 2.147.483.647) festlegen, wird der Fehler "Ganzzahlwert ..." ausgegeben.

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

Die meisten Timeouts, die Sie erhalten können (während Sie die Pakete noch senden), sind INT_MAX/1000also (dh 2.147.483). Mit einem Timeout von 1und überhaupt keinem Verkehr auf den Sitzungen würden Sie fast 25 Tage bekommen.

Offensichtlich können andere Implementierungen von SSH andere Ergebnisse haben.

Drew Chapin
quelle