Већина савета за одржавање SSH сесије на животу стаје код «додајте ServerAliveInterval 30» и изоставља корисне делове. Кључна реч је тајмер на страни клијента који се покреће само када канал ћути, он броји неодговорене провере, а не секунде, и живи у датотеци у којој побеђује прва вредност која се поклопи. Погрешите ли у та три својства, здрава VPN сесија ће ипак пасти, а мртва ће остати да виси.

Два смера припадају различитим демонима

ServerAliveInterval чита ваш ssh клијент. ClientAliveInterval чита sshd на другој страни и проверава у супротном смеру, од сервера ка клијенту. Нису алијаси и не сарађују, па постављање једног не утиче на понашање друге стране. Њихово мешање је уобичајен разлог зашто поправка делује на једној машини, а на следећој не.

Оба прихватају нулу. На нули клијент не шаље баш ништа, а на страни сервера ClientAliveCountMax од нуле искључује прекид који би иначе уследио после неодговорених провера.

Шта провера доказује, а шта не

Када прође задати интервал без података са сервера, клијент пошаље мали захтев кроз постојећи шифровани канал и чека одговор. ServerAliveCountMax одређује колико их сме остати без одговора пре него што се сесија прекине. Уз интервал 60 и број 3 клијент одустаје после отприлике три минута тишине, а тај број је својство ваше конфигурације, не мрежни стандард. Оставите ли интервал на подразумеваној вредности 0, никаква провера се никада не шаље, зато стандардни клијент може неограничено да седи на мртвој вези.

Пошто се размена одвија унутар SSH транспорта, одговор доказује да SSH процес друге стране још чита и пише. О програму који сте покренули унутар те сесије не говори ништа: клијент базе података, прослеђени порт или дуготрајна скрипта могу бити заглављени док транспорт весело одговара на провере.

TCPKeepAlive је одвојен механизам један слој ниже. Њиме управља језгро, није шифрован, а страна којој је SSH демон заглављен ипак може да га задовољи. Зато је провера на нивоу SSH смисленији сигнал када вам је важна сесија, а не сокет.

Редослед одлучује која вредност преживљава

OpenSSH примењује прву вредност коју добије за сваки параметар, па се одређени Host блок мора појавити пре било ког ширег блока који би се такође поклопио. Подразумеване вредности са џокерима ставите на дно датотеке, не на врх, и запамтите да Match блок ниже не може да надјача већ постављену вредност. Референца за конфигурацију OpenSSH клијента изричито наводи правило прве вредности и вреди је прочитати једном пре преуређивања заједничке конфигурације.

Опције командне линије побеђују датотеку, што привремени оглед чини јефтиним:

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

Да бисте видели шта је клијент заиста разрешио, а не шта мислите да сте написали, замолите га да испише делотворну конфигурацију. Излаз садржи спојене вредности за то име машине и најбржи је начин да ухватите залутали ранији блок:

ssh -G office-shell | grep -i alive

Шта keepalive поруке раде кроз тунел

Редован саобраћај спречава истек пресликавања на NAT-у или заштитном зиду који памти стање, што је стварна корист на VPN-у чији приступник одбацује неактивне токове после неколико минута. Провере које долазе сваких 60 секунди освежавају то пресликавање без преношења апликацијских података.

Не могу поново да изграде пут који је нестао. Када тунелски интерфејс нестане, провере падају као и све друго, а сесија се завршава када се број потроши. Откривање живости и опоравак пута су различити проблеми, а само први може да се подеси у ssh_config. Оно што интервал и број заиста купују јесте колико брзо клијент примети, а то је део који корисник доживљава као застој.

Мултиплексиране везе додају набор. Када је ControlMaster у игри, провере припадају главној вези, а нова сесија преко постојеће главне наслеђује оно што је та главна веза уговорила. Ако је главни процес mux-а заглављен, отварање другог прозора неће поново испитати пут.

Потврда подешавања од почетка до краја

На серверу испишите делотворну конфигурацију демона уместо да читате датотеку и погађате који је include победио:

sshd -T | grep -i clientalive

Затим посматрајте стварну сесију са укљученим излазом за отклањање грешака. Клијент испише ред о истеку времена када се број потроши, а временске ознаке око њега показују да ли је тишина била непрекинута или провере уопште нису послате. Сесија која умре без икаквог саобраћаја провера обично има кључну реч у блоку који се никада није поклопио.

Две провере вреди додати за сваку машину до које долазите само кроз тунел: потврдите да је разрешени интервал онај који сте намеравали и да је тај интервал помножен бројем краћи од времена мировања на VPN приступнику. Када је други број већи, приступник прво тихо одбаци ток и SSH провера никада не добије прилику да било шта пријави.

Повезани чланци