Većina saveta za održavanje SSH sesije na životu staje kod «dodajte ServerAliveInterval 30» i izostavlja korisne delove. Ključna reč je tajmer na strani klijenta koji se pokreće samo kada kanal ćuti, on broji neodgovorene provere, a ne sekunde, i živi u datoteci u kojoj pobeđuje prva vrednost koja se poklopi. Pogrešite li u ta tri svojstva, zdrava VPN sesija će ipak pasti, a mrtva će ostati da visi.

Dva smera pripadaju različitim daemonima

ServerAliveInterval čita vaš ssh klijent. ClientAliveInterval čita sshd na drugoj strani i proverava u suprotnom smeru, od servera ka klijentu. Nisu aliasi i ne sarađuju, pa postavljanje jednog ne utiče na ponašanje druge strane. Njihovo mešanje je uobičajen razlog zašto popravka deluje na jednoj mašini, a na sledećoj ne.

Oba prihvataju nulu. Na nuli klijent ne šalje baš ništa, a na strani servera ClientAliveCountMax od nule isključuje prekid koji bi inače usledio posle neodgovorenih provera.

Šta provera dokazuje, a šta ne

Kada prođe zadati interval bez podataka sa servera, klijent pošalje mali zahtev kroz postojeći šifrovani kanal i čeka odgovor. ServerAliveCountMax određuje koliko ih sme ostati bez odgovora pre nego što se sesija prekine. Uz interval 60 i broj 3 klijent odustaje posle otprilike tri minuta tišine, a taj broj je svojstvo vaše konfiguracije, ne mrežni standard. Ostavite li interval na podrazumevanoj vrednosti 0, nikakva provera se nikada ne šalje, zato standardni klijent može neograničeno da sedi na mrtvoj vezi.

Pošto se razmena odvija unutar SSH transporta, 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, prosleđeni port ili dugotrajna skripta mogu biti zaglavljeni dok transport veselo odgovara na provere.

TCPKeepAlive je odvojen mehanizam jedan sloj niže. Njime upravlja jezgro, nije šifrovan, a strana kojoj je SSH daemon zaglavljen ipak može da ga zadovolji. Zato je provera na nivou SSH smisleniji signal kada vam je važna sesija, a ne soket.

Redosled odlučuje koja vrednost preživljava

OpenSSH primenjuje prvu vrednost koju dobije za svaki parametar, pa se određeni Host blok mora pojaviti pre bilo kog šireg bloka koji bi se takođe poklopio. Podrazumevane vrednosti sa džokerima stavite na dno datoteke, ne na vrh, i zapamtite da Match blok niže ne može da nadjača već postavljenu vrednost. Referenca za konfiguraciju OpenSSH klijenta izričito navodi pravilo prve vrednosti i vredi je pročitati jednom pre preuređivanja zajedničke konfiguracije.

Opcije komandne linije pobeđuju datoteku, što privremeni ogled čini jeftinim:

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

Da biste videli šta je klijent zaista razrešio, a ne šta mislite da ste napisali, zamolite ga da ispiše delotvornu konfiguraciju. Izlaz sadrži spojene vrednosti za to ime mašine i najbrži je način da uhvatite zalutali raniji blok:

ssh -G office-shell | grep -i alive

Šta keepalive poruke rade kroz tunel

Redovan saobraćaj sprečava istek preslikavanja na NAT-u ili zaštitnom zidu koji pamti stanje, što je stvarna korist na VPN-u čiji pristupnik odbacuje neaktivne tokove posle nekoliko minuta. Provere koje dolaze svakih 60 sekundi osvežavaju to preslikavanje bez prenošenja aplikacijskih podataka.

Ne mogu ponovo da izgrade put koji je nestao. Kada tunelski interfejs nestane, provere padaju kao i sve drugo, a sesija se završava kada se broj potroši. Otkrivanje živosti i oporavak puta su različiti problemi, a samo prvi može da se podesi u ssh_config. Ono što interval i broj zaista kupuju jeste koliko brzo klijent primeti, a to je deo koji korisnik doživljava kao zastoj.

Multipleksirane veze dodaju nabore. Kada je ControlMaster u igri, provere pripadaju glavnoj vezi, a nova sesija preko postojeće glavne nasleđuje ono što je ta glavna veza ugovorila. Ako je glavni proces muxa zaglavljen, otvaranje drugog prozora neće ponovo ispitati put.

Potvrda podešavanja od početka do kraja

Na serveru ispišite delotvornu konfiguraciju daemona umesto da čitate datoteku i pogađate koji je include pobedio:

sshd -T | grep -i clientalive

Zatim posmatrajte stvarnu sesiju sa uključenim izlazom za otklanjanje grešaka. Klijent ispiše red o isteku vremena kada se broj potroši, a vremenske oznake oko njega pokazuju da li je tišina bila neprekinuta ili provere uopšte nisu poslate. Sesija koja umre bez ikakvog saobraćaja provera obično ima ključnu reč u bloku koji se nikada nije poklopio.

Dve provere vredi dodati za svaku mašinu do koje dolazite samo kroz tunel: potvrdite da je razrešeni interval onaj koji ste nameravali i da je taj interval pomnožen brojem kraći od vremena mirovanja na VPN pristupniku. Kada je drugi broj veći, pristupnik prvo tiho odbaci tok i SSH provera nikada ne dobije priliku da bilo šta prijavi.

Povezani članci