Co właściwie robi ServerAliveCountMax w SSH?
Usiłuję zapewnić, aby podczas łączenia się z moim serwerem za pośrednictwem protokołu SSH połączenie pozostało otwarte przez długi okres czasu, a nie połączenie zostało przerwane po krótkim okresie bezczynności. To jest przykład
Host *
ServerAliveInterval 60
ServerAliveCountMax 2
Słyszałem z jednego źródła, że powyższe ustawienie zawsze wysyła odpowiedź do serwera co 60 sekund, o ile serwer odbierze tę odpowiedź. Jeśli jednak z jakiegokolwiek powodu odpowiedź nie trafi na serwer, spróbuje wysłać kolejną wiadomość. Jeśli ten komunikat również zawiedzie, spowoduje to zamknięcie połączenia. (Czuję, że to źle)
Drugi i trzeci źródło jednak powiedzieć coś innego. Twierdzą, że wiadomość będzie wysyłana do serwera co 60 sekund, jeśli wystąpi okres bezczynności, ale wyśle tylko 2 żądania, a następnie zamknie połączenie.
Co dokładnie robi ServerAliveCountMax?
Interval
ustawiona na0
wyłączanie. Ale to nie jest jasne, czy ustawićMax
się0
. Czy wysyłałoby nieskończone pingi Alive, czy nie?Żywe komunikaty serwera są przydatne, gdy serwer SSH został skonfigurowany do zamykania połączeń po pewnym czasie bez ruchu (współużytkowani dostawcy usług hostingowych oferujący dostęp SSH prawie zawsze robią to na przykład). Ustawienie tych dwóch opcji powoduje wysyłanie pakietu co
ServerAliveInterval
sekundę, maksymalnie przezServerAliveCountMax
czas, utrzymując sesję przy życiu.Aby odpowiedzieć na komentarze dotyczące niepewności ustawienia którejkolwiek z opcji
0
, przeczytałem kod źródłowyopenssh
implementacji, a oto co widzę ...Ustawianie
ServerAliveInterval
się0
nie wysyła pakiety, ale będzie utrzymywać sesję przy życiu w nieskończoność przy założeniu, że połączenie nie jest odrzucany z powodu przekroczenia limitu czasu TCP i że serwer nie jest skonfigurowany do spadku klientów nieaktywnych.Ustawienie
ServerAliveCountMax
na0
ma taki sam efekt jak ustawienieServerAliveInterval
na0
.Ustawienie wartości ujemnej lub wartości większej niż
INT_MAX
(tj. 2 147 483 647) spowoduje błąd „wartość całkowita ...” .Ustawienie
ServerAliveCountMax
międzyINT_MAX/1000+1
(tj. 2 147 484) naINT_MAX
(tj. 2 147 483 647) byłoby również równoważne ustawieniu którejkolwiek z wartości na0
.Zasadniczo więc najwięcej limitów czasu, jakie możesz uzyskać (wciąż wysyłając pakiety), to
INT_MAX/1000
znaczy (2 147 483). Po przekroczeniu limitu czasu1
i braku ruchu w sesjach uzyskasz prawie 25 dni.Oczywiście inne implementacje SSH mogą mieć różne wyniki.
źródło