it-swarm-eu.dev

Jak funguje tcp-keepalive v ssh?

Snažím se kódovat skript Shell, který používá ssh-connection pro dělání „prezenčních signálů“. Chci ukončit klientskou a serverovou stránku tohoto připojení po uplynutí určité doby (po výpadku připojení).

Co jsem zatím našel:

  • TCPKeepAlive ano/ne pro ssh a sshd
  • ClientAliveCountMax pro sshd
  • ClientAliveInterval pro sshd
  • ServerAliveCountMax pro ssh
  • ServerAliveInterval pro ssh

Chcete-li změnit "ClientAliveCountMax", musel bych upravit sshd_config na každém cílovém počítači (tato možnost je ve výchozím nastavení zakázána).

Moje otázka tedy zní - mohu použít „TCPKeepAlive“ i pro své účely (aniž bych na zdrojových/cílových počítačích změnil cokoli jiného)?

Cílovým operačním systémem je SLES11 SP2 - ale nemyslím si, že je to relevantní zde.

92
Nils

Pravděpodobně byste pro to měli použít nastavení ServerAlive. Nevyžadují žádnou konfiguraci na serveru a lze je nastavit na příkazovém řádku, pokud si přejete.

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

Tímto se každých 5 sekund odešle ssh keepalive message, a pokud přijde čas poslat další keepalive, ale odpověď na poslední nebyla přijata, připojení bude ukončeno.

Kritický rozdíl mezi ServerAliveInterval a TCPKeepAlive je vrstva, ve které pracují.

  • TCPKeepAlive pracuje na vrstvě TCP. Odesílá prázdný TCP paket ACK.) Firewally lze nakonfigurovat tak, aby tyto pakety ignorovaly, takže pokud projít bránou firewall, která přeruší nečinná připojení, nemusí to vést k udržení spojení.
  • ServerAliveInterval pracuje ve vrstvě ssh. Ve skutečnosti bude odesílat data prostřednictvím ssh, takže paket TCP paket šifruje data a firewall nemůže zjistit, zda je to udržovací nebo legitimní paket, takže tyto fungují lépe).
114
Patrick

Možnost TCPKeepAlive je ve skutečnosti velmi odlišná metoda udržování připojení naživu z možností podobných ClientAlive nebo ServerAlive.

Jsou na BSD SSH manuální stránka , můžeme si přečíst, že:

Živé zprávy klienta jsou odesílány prostřednictvím šifrovaného kanálu, a proto nebudou spoofable. Možnost TCP keepalive povolená parametrem TCPKeepAlive je spoofable. Mechanismus prožívání klienta je cenný, pokud klient nebo server závisí na tom, kdy je spojení neaktivní.

TCPKeepAlive se ujistí, zda by systém měl posílat TCP udržovací zprávy na druhou stranu. Výchozí možnost je vždy povolena).

Pokud používáte ClientAliveInterval, můžete deaktivovat TCPKeepAlive. Tato volba odešle zprávu šifrovaným kanálem, aby si vyžádala odpověď od klienta (výchozí hodnota je 0, takže klientovi nejsou zasílány žádné zprávy) a ClientAliveCountMax nastavuje počet zpráv klienta, které jsou naživu, než se sshd odpojí klienta ukončením relace.

7
kenorb