it-swarm.com.de

Wie funktioniert tcp-keepalive in ssh?

Ich versuche, ein Shell-Skript zu codieren, das eine SSH-Verbindung verwendet, um "Herzschläge" auszuführen. Ich möchte die Client- und Serverseite dieser Verbindung nach einer bestimmten Zeitüberschreitung beenden (nachdem die Verbindung unterbrochen wurde).

Was ich bisher gefunden habe:

  • TCPKeepAlive ja/nein für ssh und sshd
  • ClientAliveCountMax für sshd
  • ClientAliveInterval für sshd
  • ServerAliveCountMax für ssh
  • ServerAliveInterval für ssh

Um "ClientAliveCountMax" zu ändern, müsste ich die sshd_config auf jedem Zielcomputer ändern (diese Option ist standardmäßig deaktiviert).

Meine Frage lautet also: Kann ich "TCPKeepAlive" auch für meine Zwecke verwenden (ohne etwas anderes auf den Quell-/Zielcomputern zu ändern)?

Zielbetriebssystem ist SLES11 SP2 - aber ich denke nicht, dass dies hier relevant ist.

92
Nils

Sie möchten wahrscheinlich die ServerAlive-Einstellungen dafür verwenden. Sie erfordern keine Konfiguration auf dem Server und können auf Wunsch in der Befehlszeile festgelegt werden.

ssh -o ServerAliveInterval=5 -o ServerAliveCountMax=1 $Host

Dadurch wird alle 5 Sekunden eine SSH-Keepalive-Nachricht gesendet. Wenn es an der Zeit ist, ein weiteres Keepalive zu senden, aber keine Antwort auf das letzte erhalten wurde, wird die Verbindung beendet.

Der kritische Unterschied zwischen ServerAliveInterval und TCPKeepAlive ist die Ebene, auf der sie arbeiten.

  • TCPKeepAlive arbeitet auf der Ebene TCP. Es wird ein leeres TCP ACK-Paket) gesendet. Firewalls können so konfiguriert werden, dass diese Pakete ignoriert werden Gehen Sie durch eine Firewall, die inaktive Verbindungen trennt. Diese halten die Verbindung möglicherweise nicht am Leben.
  • ServerAliveInterval arbeitet auf der SSH-Ebene. Es werden tatsächlich Daten über ssh gesendet, sodass das Paket TCP) Daten verschlüsselt hat und eine Firewall nicht erkennen kann, ob es sich um ein Keepalive-Paket oder ein legitimes Paket handelt, sodass diese besser funktionieren.
114
Patrick

Die Option TCPKeepAlive ist eine ganz andere Methode, um Verbindungen von ClientAlive-ähnlichen oder ServerAlive-ähnlichen Optionen am Leben zu erhalten.

Sind per BSD SSH Handbuchseite , können wir das lesen:

Die Client-Alive-Nachrichten werden über den verschlüsselten Kanal gesendet und sind daher nicht fälschbar. Die von TCPKeepAlive aktivierte Option TCP keepalive) ist fälschbar. Der Client-Alive-Mechanismus ist hilfreich, wenn der Client oder Server wissen muss, wann eine Verbindung inaktiv geworden ist.

Die TCPKeepAlive stellen sicher, dass das System TCP Keepalive-Nachrichten an die andere Seite senden soll. Die Standardoption ist immer aktiviert.

Wenn Sie ClientAliveInterval verwenden, können Sie TCPKeepAlive deaktivieren. Diese Option sendet eine Nachricht über den verschlüsselten Kanal, um eine Antwort vom Client anzufordern (der Standardwert ist 0, daher werden keine Nachrichten an den Client gesendet), und ClientAliveCountMax legt die Anzahl der aktiven Client-Nachrichten fest, bevor sshd die Verbindung trennt den Client durch Beenden der Sitzung.

7
kenorb