Väčšina rád, ako udržať SSH reláciu živú, skončí pri «pridajte ServerAliveInterval 30» a užitočné časti vynechá. Kľúčové slovo je časovač na strane klienta, ktorý sa spustí len vtedy, keď kanál mlčí, počíta nezodpovedané sondy, nie sekundy, a žije v súbore, kde vyhráva prvá zodpovedajúca hodnota. Pomýlite sa v týchto troch vlastnostiach a zdravá VPN relácia napriek tomu padne, kým mŕtva bude visieť.

Dva smery patria rôznym démonom

ServerAliveInterval číta váš klient ssh. ClientAliveInterval číta sshd na vzdialenej strane a sondáž robí opačným smerom, od servera ku klientovi. Nie sú to aliasy a nespolupracujú, takže nastavenie jedného nemá vplyv na správanie druhého konca. Ich zámena je obvyklým dôvodom, prečo oprava vyzerá, že na jednom hostiteľovi funguje a na ďalšom nie.

Oba prijímajú nulu. Pri nule klient neposiela vôbec nič a na strane servera ClientAliveCountMax s nulou vypne odpojenie, ktoré by inak nasledovalo po nezodpovedaných kontrolách.

Čo sonda dokazuje a čo nie

Keď uplynie nastavený interval bez toho, aby zo servera dorazili dáta, klient pošle malú požiadavku existujúcim šifrovaným kanálom a čaká na odpoveď. ServerAliveCountMax určuje, koľko z nich môže zostať bez odpovede, kým sa relácia ukončí. Pri intervale 60 a počte 3 to klient vzdá približne po troch minútach ticha a toto číslo je vlastnosťou vašej konfigurácie, nie sieťovým štandardom. Nechajte interval na predvolenej hodnote 0 a žiadna sonda sa nikdy neodošle, preto môže štandardný klient neobmedzene sedieť na mŕtvom spojení.

Keďže výmena prebieha vnútri transportu SSH, odpoveď dokazuje, že proces SSH protistrany stále číta a zapisuje. Nič to nehovorí o programe, ktorý ste v tejto relácii spustili: databázový klient, presmerovaný port alebo dlho bežiaci skript môžu byť zaseknuté, zatiaľ čo transport veselo odpovedá na sondy.

TCPKeepAlive je samostatný mechanizmus o vrstvu nižšie. Riadi ho jadro, nie je šifrovaný a protistrana, ktorej SSH démon je zaseknutý, ho stále môže splniť. Preto je sonda na úrovni SSH zmysluplnejším signálom, keď vám ide o reláciu, a nie o socket.

O prežití hodnoty rozhoduje poradie

OpenSSH použije prvú hodnotu, ktorú pre každý parameter získa, takže konkrétny blok Host musí byť pred akýmkoľvek širším blokom, ktorý by tiež zodpovedal. Predvolené hodnoty so zástupnými znakmi dávajte na koniec súboru, nie na začiatok, a pamätajte, že blok Match nižšie nemôže prepísať už nastavenú hodnotu. Referencia ku konfigurácii klienta OpenSSH uvádza pravidlo prvej hodnoty priamo a vyplatí sa ju raz prečítať pred preusporiadaním zdieľanej konfigurácie.

Prepínače príkazového riadka prebíjajú súbor, čo robí z dočasného experimentu lacnú záležitosť:

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

Aby ste videli, čo klient naozaj vyriešil, a nie to, čo si myslíte, že ste napísali, nechajte ho vypísať efektívnu konfiguráciu. Výstup obsahuje zlúčené hodnoty pre toto meno hostiteľa a je najrýchlejším spôsobom, ako zachytiť zblúdilý skorší blok:

ssh -G office-shell | grep -i alive

Čo robia keepalivy cez tunel

Pravidelná premávka bráni vypršaniu mapovania stavového NAT alebo firewallu, čo je skutočný prínos na VPN, ktorej brána zahadzuje nečinné toky po niekoľkých minútach. Sondy prichádzajúce každých 60 sekúnd toto mapovanie obnovujú bez prenosu akýchkoľvek aplikačných dát.

Nedokážu znovu postaviť cestu, ktorá zmizla. Keď tunelové rozhranie zmizne, sondy zlyhajú ako všetko ostatné a relácia sa skončí, keď sa počet vyčerpá. Detekcia živosti a obnova cesty sú rôzne problémy a v ssh_config sa dá nastaviť len prvý. Čo vám interval a počet naozaj kúpia, je to, ako rýchlo si klient všimne, a to je časť, ktorú používateľ prežíva ako zamrznutie.

Multiplekované spojenia pridávajú záhyb. Keď je v hre ControlMaster, sondy patria hlavnému spojeniu a nová relácia cez existujúce hlavné spojenie dedí to, čo toto spojenie dohodlo. Ak je hlavný proces muxu zaseknutý, otvorenie ďalšieho okna cestu znovu neotestuje.

Overenie nastavenia od začiatku do konca

Na serveri vypíšte efektívnu konfiguráciu démona, namiesto toho, aby ste čítali súbor a hádali, ktorý include vyhral:

sshd -T | grep -i clientalive

Potom sledujte skutočnú reláciu so zapnutým ladiacim výstupom. Keď sa počet vyčerpá, klient vypíše riadok o časovom limite, a časové značky okolo neho ukážu, či bolo ticho súvislé alebo sa sondy vôbec neposielali. Relácia, ktorá umrie bez akejkoľvek premávky sond, má zvyčajne kľúčové slovo v bloku, ktorý nikdy nezodpovedal.

Pre každého hostiteľa, ku ktorému sa dostanete len cez tunel, sa vyplatí pridať dve kontroly: potvrďte, že vyriešený interval je ten, ktorý ste zamýšľali, a že tento interval vynásobený počtom je kratší než čas nečinnosti na bráne VPN. Keď je druhé číslo väčšie, brána najprv potichu zahodí tok a sonda SSH sa vôbec nedostane k tomu, aby niečo nahlásila.

Súvisiace články