Većina savjeta o održavanju SSH sesije na životu završava kod «dodajte ServerAliveInterval 30» i izostavlja korisne dijelove. Ključna riječ je mjerač vremena na klijentskoj strani koji se aktivira samo kad kanal miruje, broji neodgovorene upite umjesto sekundi i živi u datoteci u kojoj pobjeđuje prva vrijednost koja se podudara. Pogriješite li u tim trima svojstvima, zdrava VPN sesija ipak će pasti, a mrtva će ostati visjeti.

Dva smjera obrađuju različiti daemoni

ServerAliveInterval čita vaš ssh klijent. ClientAliveInterval čita sshd na udaljenoj strani i provjerava u suprotnom smjeru, od poslužitelja prema klijentu. Nisu istoimnice i ne surađuju, pa postavljanje jednoga ne mijenja ponašanje druge strane. Njihova zamjena uobičajen je razlog zašto popravak djeluje na jednom računalu, a na sljedećem ne.

Obje prihvaćaju nulu. Kod nule klijent ne šalje baš ništa, a na strani poslužitelja ClientAliveCountMax postavljen na nulu isključuje prekid koji bi inače uslijedio nakon neodgovorenih provjera.

Što upit dokazuje, a što ne dokazuje

Kad prođe zadani interval, a s poslužitelja ne stigne nikakav podatak, klijent pošalje mali zahtjev kroz postojeći šifrirani kanal i čeka odgovor. ServerAliveCountMax određuje koliko ih smije ostati bez odgovora prije nego se sesija prekine. Uz interval 60 i broj 3 klijent odustaje nakon otprilike tri minute tišine, a taj je broj svojstvo vaše konfiguracije, ne mrežni standard. Ostavite li interval na zadanoj vrijednosti 0, nijedan upit nikada neće biti poslan, zato standardni klijent može neograničeno sjediti na mrtvoj vezi.

Budući da se razmjena odvija unutar SSH prijenosa, odgovor dokazuje da SSH proces druge strane još čita i piše. O programu koji ste pokrenuli unutar te sesije ne govori ništa: klijent baze podataka, proslijeđeni port ili dugotrajna skripta mogu biti zaglavljeni dok prijenos veselo odgovara na upite.

TCPKeepAlive je zaseban mehanizam jedan sloj niže. Njime upravlja jezgra, nije šifriran, a strana kojoj je SSH daemon zaglavljen ipak ga može zadovoljiti. Zato je upit na razini SSH smisleniji signal kada vam je važna sesija, a ne utičnica.

Redoslijed odlučuje koja vrijednost preživljava

OpenSSH primjenjuje prvu vrijednost koju dobije za svaki parametar, pa se određeni Host blok mora pojaviti prije bilo kojeg šireg bloka koji bi se također podudarao. Zadane vrijednosti s džokerima stavite na dno datoteke, ne na vrh, i zapamtite da Match blok niže ne može nadjačati već postavljenu vrijednost. Referenca za konfiguraciju OpenSSH klijenta izravno navodi pravilo prve vrijednosti i vrijedi je pročitati jednom prije preuređivanja zajedničke konfiguracije.

Opcije naredbenog retka pobjeđuju datoteku, što privremeni pokus čini jeftinim:

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

Da biste vidjeli što je klijent stvarno razriješio, a ne što mislite da ste napisali, zamolite ga da ispiše djelotvornu konfiguraciju. Izlaz sadrži spojene vrijednosti za to ime računala i najbrži je način da uhvatite zalutali raniji blok:

ssh -G office-shell | grep -i alive

Što keepalive poruke čine kroz tunel

Redoviti promet sprječava istek preslikavanja na NAT-u ili vatrozidu koji pamti stanje, što je stvarna korist na VPN-u čiji pristupnik odbacuje neaktivne tokove nakon nekoliko minuta. Upiti koji dolaze svakih 60 sekundi osvježavaju to preslikavanje bez prijenosa aplikacijskih podataka.

Ne mogu ponovno izgraditi put koji je nestao. Kad tunelsko sučelje nestane, upiti padaju kao i sve drugo, a sesija završava kad se broj potroši. Otkrivanje živosti i oporavak puta različiti su problemi, a samo se prvi može postaviti u ssh_config. Ono što interval i broj doista kupuju jest koliko brzo klijent primijeti, a to je dio koji korisnik doživljava kao zastoj.

Multipleksirane veze dodaju nabor. Kad je ControlMaster u igri, upiti pripadaju glavnoj vezi, a nova sesija preko postojeće glavne veze nasljeđuje ono što je ta glavna veza ugovorila. Ako je glavni proces muxa zaglavljen, otvaranje još jednog prozora neće ponovno ispitati put.

Potvrda postavke od početka do kraja

Na poslužitelju ispišite djelotvornu konfiguraciju daemona umjesto da čitate datoteku i pogađate koji je include pobijedio:

sshd -T | grep -i clientalive

Zatim promatrajte stvarnu sesiju s uključenim izlazom za otklanjanje pogrešaka. Klijent ispiše redak o isteku vremena kad se broj potroši, a vremenske oznake oko njega pokazuju je li tišina bila neprekinuta ili upiti uopće nisu poslani. Sesija koja umre bez ikakvog prometa upita obično ima ključnu riječ u bloku koji se nikad nije podudario.

Dvije provjere vrijedi dodati za svako računalo do kojeg dolazite samo kroz tunel: potvrdite da je razriješeni interval onaj koji ste namjeravali i potvrdite da je taj interval pomnožen brojem kraći od vremena mirovanja na VPN pristupniku. Kad je drugi broj veći, pristupnik prvo tiho odbaci tok i SSH upit nikad ne dobije priliku ništa prijaviti.

Povezani članci