VPN üzərində SSH ServerAliveInterval: yoxlamanı hansı tərəf göndərir?
ServerAliveInterval cavabsız qalan yoxlamaları sayan müştəri taymeridir, saniyələri yox. Hansı tərəfin göndərdiyini, Host sırasının niyə qazandığını və necə yoxlanacağını görün.
SSH bağlantısını canlı saxlamaq üçün verilən məsləhətlərin çoxu «ServerAliveInterval 30 əlavə edin» deyib dayanır və faydalı hissələri kənarda qoyur. Açar söz kanal sakit qaldıqda işə düşən müştəri tərəfli taymerdir, o, saniyələri deyil, cavabsız qalan yoxlamaları sayır və ilk uyğun dəyərin qalib gəldiyi bir faylda yaşayır. Bu üç xassəni səhv etsəniz, sağlam VPN sessiyası yenə də düşər, ölü sessiya isə asılı qalar.
İki istiqamət fərqli daemonlara aiddir
ServerAliveInterval sizin ssh müştəriniz tərəfindən oxunur. ClientAliveInterval uzaq tərəfdəki sshd tərəfindən oxunur və əks istiqamətdə, serverdən müştəriyə doğru yoxlayır. Onlar eyni şeyin iki adı deyil və birlikdə işləmir, buna görə birini qurmaq digər tərəfin davranışına təsir etmir. Onları qarışdırmaq düzəlişin bir hostda işləyib növbətində işləməməsinin adi səbəbidir.
İkisi də sıfırı qəbul edir. Sıfırda müştəri heç nə göndərmir, server tərəfində isə ClientAliveCountMax sıfır olduqda cavabsız yoxlamalardan sonra gələcək bağlantı kəsilməsi söndürülür.
Yoxlama nəyi sübut edir və nəyi etmir
Serverdən heç bir məlumat gəlmədən konfiqurasiya edilmiş interval keçdikdən sonra müştəri mövcud şifrələnmiş kanaldan kiçik bir sorğu göndərir və cavab gözləyir. ServerAliveCountMax sessiyanın kəsilməsindən əvvəl bunların neçəsinin cavabsız qala biləcəyini təyin edir. 60 intervalı və 3 sayı ilə müştəri təxminən üç dəqiqəlik sükutdan sonra əl çəkir və bu rəqəm şəbəkə standartı deyil, sizin konfiqurasiyanızın xassəsidir. İntervalı standart 0 dəyərində qoysanız, heç vaxt yoxlama göndərilməz, buna görə standart müştəri ölü bağlantı üzərində qeyri-müəyyən müddət otura bilər.
Mübadilə SSH nəqliyyatının içində getdiyi üçün cavab qarşı tərəfin SSH prosesinin hələ də oxuyub yazdığını sübut edir. Bu, həmin sessiya daxilində başlatdığınız proqram haqqında heç nə demir: verilənlər bazası müştərisi, yönləndirilmiş port və ya uzun sürən skript nəql yoxlamalara rahat cavab verərkən ilişib qala bilər.
TCPKeepAlive bir qat aşağıda yerləşən ayrı mexanizmdir. Onu nüvə idarə edir, şifrələnmir və SSH daemonu ilişmiş qarşı tərəf də onu təmin edə bilər. Buna görə socu deyil, sessiyanı vacib sayırsınızsa, SSH səviyyəsindəki yoxlama daha mənalı siqnaldır.
Hansı dəyərin qalacağını sıra həll edir
OpenSSH hər parametr üçün əldə etdiyi ilk dəyəri tətbiq edir, buna görə konkret Host bloku uyğun gələcək hər hansı daha geniş blokdan əvvəl görünməlidir. Wildcard standartlarını faylın yuxarısına deyil, aşağısına qoyun və yadda saxlayın ki, aşağıdakı Match bloku artıq qurulmuş dəyəri üstələyə bilməz. OpenSSH müştəri konfiqurasiya sənədi ilk dəyər qaydasını birbaşa göstərir və ortaq konfiqurasiyanı yenidən təşkil etməzdən əvvəl bir dəfə oxumağa dəyər.
Əmr sətri seçimləri fayldan üstündür, bu da müvəqqəti təcrübəni ucuz edir:
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=4 office-shellYazdığınızı düşündüyünüz şeyin əvəzinə müştərinin həqiqətən nəyi həll etdiyini görmək üçün ondan effektiv konfiqurasiyanı çıxarmasını istəyin. Çıxış həmin host adı üçün birləşdirilmiş dəyərləri saxlayır və səhv düşmüş əvvəlki bloku tutmağın ən sürətli yoludur:
ssh -G office-shell | grep -i aliveKeepalive-lar tunel üzərində nə edir
Dövri trafik vəziyyət saxlayan NAT və ya firewall xəritəsinin vaxtının bitməsinin qarşısını alır ki, bu da boş axınları bir neçə dəqiqədən sonra atan VPN şlüzü üçün real faydadır. Hər 60 saniyədə gələn yoxlamalar heç bir tətbiq məlumatı daşımadan həmin xəritəni təzələyir.
Onlar yoxa çıxmış yolu yenidən qura bilməz. Tunel interfeysi itəndə yoxlamalar hər şey kimi uğursuz olur və say tükənən kimi sessiya bitir. Canlılıq aşkarlanması və yol bərpası fərqli problemlərdir və yalnız birincisi ssh_config-də konfiqurasiya edilə bilər. İnterval və sayın sizə həqiqətən aldığı şey müştərinin nə qədər tez fərq etməsidir ki, istifadəçi bunu donma kimi yaşayır.
Multiplex edilmiş bağlantılar bir qırış əlavə edir. ControlMaster işdə olanda yoxlamalar master bağlantıya aiddir və mövcud master üzərindən yeni sessiya həmin masterin razılaşdırdığını miras alır. Mux master ilişibsə, başqa pəncərə açmaq yolu yenidən sınamayacaq.
Parametrin başdan sona təsdiqi
Serverdə faylı oxuyub hansı include-un qazandığını təxmin etmək əvəzinə effektiv daemon konfiqurasiyasını çıxarın:
sshd -T | grep -i clientaliveSonra sazlama çıxışı aktiv olan real sessiyanı izləyin. Say tükənəndə müştəri bir timeout sətri çap edir və ətrafındakı zaman nişanları sükutun davamlı olduğunu, yoxsa yoxlamaların heç göndərilmədiyini göstərir. Heç bir yoxlama trafiki olmadan ölən sessiyada açar söz adətən heç uyğunlaşmayan blokda olur.
Yalnız tunel vasitəsilə çatdığınız hər host üçün iki yoxlama əlavə etməyə dəyər: həll olunan intervalın niyyət etdiyiniz olduğunu təsdiqləyin və həmin intervalın saya vurulmasının VPN şlüzündəki boş qalma müddətindən qısa olduğunu təsdiqləyin. İkinci rəqəm böyük olduqda şlüz axını əvvəlcə səssizcə atır və SSH yoxlaması heç nə bildirmək şansı tapmır.