Většina rad, jak udržet SSH relaci živou, skončí u «přidejte ServerAliveInterval 30» a užitečné části vynechá. Klíčové slovo je časovač na straně klienta, který se spustí jen tehdy, když kanál mlčí, počítá nezodpovězené sondy, nikoli sekundy, a žije v souboru, kde vyhrává první odpovídající hodnota. Spletete-li tyto tři vlastnosti, zdravá VPN relace přesto spadne, zatímco mrtvá bude viset.

Dva směry patří různým démonům

ServerAliveInterval čte váš klient ssh. ClientAliveInterval čte sshd na vzdálené straně a snímá opačným směrem, od serveru ke klientovi. Nejsou to aliasy a nespolupracují, takže nastavení jednoho nemá vliv na chování druhého konce. Jejich záměna je obvyklým důvodem, proč oprava vypadá, že na jednom hostiteli funguje, a na dalším ne.

Oba přijímají nulu. Při nule klient neposílá vůbec nic a na straně serveru ClientAliveCountMax s nulou vypne odpojení, které by jinak následovalo po nezodpovězených kontrolách.

Co sonda dokazuje a co ne

Když uplyne nastavený interval, aniž by ze serveru dorazila data, klient pošle malý požadavek stávajícím šifrovaným kanálem a čeká na odpověď. ServerAliveCountMax určuje, kolik z nich může zůstat bez odpovědi, než se relace ukončí. Při intervalu 60 a počtu 3 to klient vzdá zhruba po třech minutách ticha a toto číslo je vlastnost vaší konfigurace, ne síťový standard. Necháte-li interval na výchozí hodnotě 0, žádná sonda se nikdy neodešle, a proto může standardní klient neomezeně sedět na mrtvém spojení.

Protože výměna probíhá uvnitř transportu SSH, odpověď dokazuje, že proces SSH protistrany stále čte a zapisuje. Nic to neříká o programu, který jste v této relaci spustili: databázový klient, přesměrovaný port nebo dlouho běžící skript mohou být zaseknuté, zatímco transport vesele odpovídá na sondy.

TCPKeepAlive je samostatný mechanismus o vrstvu níž. Řídí ho jádro, není šifrovaný a protistrana, jejíž SSH démon je zaseknutý, ho stále může splnit. Proto je sonda na úrovni SSH smysluplnějším signálem, když vám jde o relaci, a ne o socket.

O přežití hodnoty rozhoduje pořadí

OpenSSH použije první hodnotu, kterou pro každý parametr získá, takže konkrétní blok Host musí být před jakýmkoli širším blokem, který by také odpovídal. Výchozí hodnoty se zástupnými znaky dávejte na konec souboru, ne na začátek, a pamatujte, že blok Match níže nemůže přebít hodnotu, která už je nastavena. Reference ke konfiguraci klienta OpenSSH uvádí pravidlo první hodnoty přímo a vyplatí se ji jednou přečíst před přeuspořádáním sdílené konfigurace.

Přepínače příkazového řádku přebíjejí soubor, což dělá z dočasného experimentu levnou záležitost:

ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=4 office-shell

Chcete-li vidět, co klient skutečně vyřešil, a ne co si myslíte, že jste napsali, nechte ho vypsat efektivní konfiguraci. Výstup obsahuje sloučené hodnoty pro toto jméno hostitele a je nejrychlejším způsobem, jak zachytit zbloudilý dřívější blok:

ssh -G office-shell | grep -i alive

Co dělají keepalivy přes tunel

Pravidelný provoz brání vypršení mapování stavového NAT nebo firewallu, což je skutečný přínos na VPN, jejíž brána zahazuje nečinné toky po několika minutách. Sondy přicházející každých 60 sekund toto mapování obnovují, aniž by nesly jakákoli aplikační data.

Cestu, která zmizela, znovu postavit nedokážou. Když tunelové rozhraní zmizí, sondy selžou jako všechno ostatní a relace skončí, jakmile se počet vyčerpá. Detekce živosti a obnova cesty jsou různé problémy a v ssh_config lze nastavit jen ten první. Co vám interval a počet skutečně kupují, je jak rychle si klient všimne, a to je část, kterou uživatel prožívá jako zamrznutí.

Multiplexované spojení přidává záhyb. Když je ve hře ControlMaster, sondy patří hlavnímu spojení a nová relace přes existující hlavní spojení zdědí, co toto hlavní spojení vyjednalo. Pokud je hlavní proces muxu zaseknutý, otevření dalšího okna cestu znovu neotestuje.

Ověření nastavení od začátku do konce

Na serveru vydejte efektivní konfiguraci démona, místo abyste četli soubor a hádali, který include vyhrál:

sshd -T | grep -i clientalive

Pak sledujte skutečnou relaci se zapnutým ladicím výstupem. Klient vypíše řádek o vypršení času, když se počet vyčerpá, a časové značky kolem něj ukážou, zda ticho bylo souvislé, nebo zda se sondy vůbec neodesílaly. Relace, která umře bez jakéhokoli provozu sond, má obvykle klíčové slovo v bloku, který nikdy neodpovídal.

Pro každého hostitele, ke kterému se dostanete jen přes tunel, se vyplatí přidat dvě kontroly: potvrďte, že vyřešený interval je ten, který jste zamýšleli, a potvrďte, že tento interval vynásobený počtem je kratší než doba nečinnosti na bráně VPN. Když je druhé číslo větší, brána tok nejprve tiše zahodí a sonda SSH se vůbec nedostane k tomu, aby něco nahlásila.

Související články