Ich versuche, ein Shell-Skript zu programmieren, das eine ssh-Verbindung verwendet, um "Heartbeats" auszuführen. Ich möchte die Client- und Serverseite dieser Verbindung nach einem bestimmten Timeout (nachdem die Verbindung getrennt wurde) beenden.
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 ist 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 halte das hier nicht für relevant.
ControlMaster
Option und verwenden Sie Slave-Verbindungen?Antworten:
Wahrscheinlich möchten Sie hierfür die ServerAlive-Einstellungen verwenden. Sie erfordern keine Konfiguration auf dem Server und können auf Wunsch in der Befehlszeile festgelegt werden.
Dadurch wird alle 5 Sekunden eine ssh-Keepalive-Nachricht gesendet. Wenn eine weitere Keepalive-Nachricht gesendet werden muss, aber keine Antwort auf die letzte eingegangen ist, wird die Verbindung beendet.
Der kritische Unterschied zwischen
ServerAliveInterval
undTCPKeepAlive
ist die Schicht, auf der sie arbeiten.TCPKeepAlive
arbeitet auf der TCP-Ebene. Es sendet ein leeres TCP-ACK-Paket. Firewalls können so konfiguriert werden, dass diese Pakete ignoriert werden. Wenn Sie also eine Firewall durchlaufen, die inaktive Verbindungen unterbricht, wird die Verbindung möglicherweise nicht aufrecht erhalten.ServerAliveInterval
arbeitet auf der SSH-Ebene. Es sendet tatsächlich Daten über ssh, sodass das TCP-Paket verschlüsselte Daten enthält und eine Firewall nicht erkennen kann, ob es sich um ein Keepalive- oder ein legitimes Paket handelt, sodass diese besser funktionieren.quelle
Seconds between keepalives
, indem Sie unter Einstellungen | auf 1800 wechseln Verbindung.Die
TCPKeepAlive
Option ist eine ganz andere Methode, um Verbindungen am Leben zu erhalten, als die ClientAlive- oder ServerAlive-ähnlichen Optionen.Sind pro BSD SSH Handbuchseite , können wir lesen, dass:
Das
TCPKeepAlive
stellen Sie sicher , ob das System TCP Keep - Alive - Nachrichten an der anderen Seite senden. Die Standardoption ist immer aktiviert.Wenn Sie verwenden
ClientAliveInterval
, können Sie deaktivierenTCPKeepAlive
. Diese Option sendet eine Nachricht über den verschlüsselten Kanal, um eine Antwort vom Client anzufordern (die Standardeinstellung ist 0, sodass keine Nachrichten an den Client gesendet werden). SieClientAliveCountMax
legt die Anzahl der aktiven Client-Nachrichten fest, bevor sshd den Client durch Beenden von trennt Session.quelle