Jaki jest domyślny limit czasu bezczynności dla OpenSSH?

25

Nie mogę znaleźć odpowiedzi na to proste pytanie, którego potrzebuję do dokumentacji zgodności.

Po domyślnej instalacji CentOS 6.5 (OpenSSH 5.3p1-94.el6), po jakim czasie bezczynności sesja SSH użytkownika zostanie zakończona? Uważam, że można ustawić następujące opcje, aby zwiększyć limit czasu bezczynności, ale są one domyślnie komentowane.

$ grep -i alive /etc/ssh/sshd_config
#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

Czy istnieje również polecenie zrzucenia listy bieżących sshdustawień? Nic nie widzę man sshd.

Banjer
źródło
3
Niektóre pociski można ustawić tak, aby wychodziły po upływie limitu czasu. To spowodowałoby zakończenie sesji ssh. Sprawdź, czy ustawiona jest zmienna środowiskowa TMOUT.
Kenster,

Odpowiedzi:

23

Komentowane linie sshd_configzwykle wyświetlają wartości domyślne. Tak jest w przypadku wszystkich wierszy w pytaniu. Możesz to sprawdzić na stronie sshd_configpodręcznika . Oto odpowiednie fragmenty:

TCPKeepAlive

      Określa, czy system powinien wysyłać komunikaty podtrzymujące TCP na drugą stronę. Jeśli zostaną wysłane, śmierć połączenia lub awaria jednego z urządzeń zostanie odpowiednio zauważona. Oznacza to jednak, że połączenia zostaną przerwane, jeśli trasa będzie chwilowo nieczynna, a niektórzy uważają ją za irytującą. Z drugiej strony, jeśli Keepalives TCP nie zostaną wysłane, sesje mogą zawiesić się na serwerze w nieskończoność, pozostawiając „duchowych” użytkowników i zużywając zasoby serwera.

      Wartość domyślna to „tak” (w celu wysyłania komunikatów podtrzymujących TCP), a serwer zauważy, że nastąpi awaria sieci lub nastąpi awaria hosta klienta. Pozwala to uniknąć nieskończenie wiszących sesji.

      Aby wyłączyć komunikaty podtrzymujące TCP, wartość należy ustawić na „nie”.

      Ta opcja była wcześniej nazywana KeepAlive.

ClientAliveCountMax

      Ustawia liczbę żywych wiadomości klienta (patrz poniżej), które mogą zostać wysłane bez sshd (8) odbierającej jakiekolwiek wiadomości z powrotem od klienta. Jeśli ten próg zostanie osiągnięty podczas wysyłania żywych wiadomości klienta, sshd rozłączy klienta, kończąc sesję. Należy zauważyć, że korzystanie z żywych wiadomości klienta jest bardzo różneTCPKeepAlive (poniżej)(powyżej). Żywe wiadomości klienta są wysyłane zaszyfrowanym kanałem i dlatego nie będą sfałszowane. Włączona opcja TCP keepalive TCPKeepAlivejest sfałszowana. Żywy mechanizm klienta jest cenny, gdy klient lub serwer zależą od wiedzy, kiedy połączenie staje się nieaktywne.

      Wartość domyślna to 3. Jeśli ClientAliveInterval(patrz poniżej) jest ustawiona na 15 i ClientAliveCountMaxpozostała domyślna, niereagujący klienci SSH zostaną rozłączeni po około 45 sekundach. Ta opcja dotyczy tylko protokołu w wersji 2.

ClientAliveInterval

      Ustawia limit czasu w sekundach, po którym, jeśli nie otrzymano żadnych danych od klienta, sshd (8) wyśle ​​wiadomość przez zaszyfrowany kanał z prośbą o odpowiedź od klienta. Wartość domyślna to 0, co oznacza, że ​​te wiadomości nie będą wysyłane do klienta. Ta opcja dotyczy tylko protokołu w wersji 2.

Jordan
źródło
1
Popraw mnie, jeśli się mylę, ale jeśli między mną a maszyną nie ma zapory ogniowej (z domyślnymi konfiguracjami), to nigdy nie zostałbym rozłączony? Wiem, że nasza zapora sieciowa porzuca bezczynne połączenia TCP po 60 minutach, więc tam właśnie dzieje się zamykanie bezczynnych połączeń. Chciałem tylko sprawdzić, czy sam OpenSSH wyraźnie zamyka sesje. Myślę, że odpowiedź brzmi: nie, openssh nie zamyka jawnie połączeń bezczynnych, ale zapory ogniowe zazwyczaj tak robią. Ustawienia wymienione w odpowiedzi faktycznie pomagają utrzymać połączenie lub poprawnie zakończyć sesję, jeśli zauważy, że została zerwana.
Banjer
2
Cytowany tekst mówi, że domyślną wartością ClientAliveInterval jest 0, co oznacza, że ​​nie określa przedziału czasu, dla którego połączenie pozostaje otwarte. A jednak wiemy, że przedział czasu ma domyślnie pewną skończoną wartość. Dlatego wydaje się, że musi istnieć jakiś inny parametr, który określa, jak długo połączenie pozostaje domyślnie otwarte. Jeśli moja powyższa analiza jest prawidłowa, załóżmy, że zarówno serwer, jak i klient są komputerami z systemem Linux, na których działa openssh i oba używają wszystkich ustawień domyślnych. W takim przypadku, która strona ustawia wartość domyślną, jaka jest jej wartość i gdzie jest ustawiona?
Ben Crowell,
2
@BenCrowell A przecież wiemy, że przedział czasu ma domyślnie pewną skończoną wartość. Jaki przedział czasu i skąd to wiesz?
Piotr Dobrogost
9

Możesz skonfigurować utrzymanie SSH po stronie klienta lub serwera:

Strona klienta

Plik: /etc/ssh/ssh_config

Zawartość:

Host *
ServerAliveInterval XX
ServerAliveCountMax YY

Po stronie serwera

Plik: /etc/ssh/sshd_config

Zawartość:

ClientAliveInterval XX
ClientAliveCountMax YY

Wyodrębniono z: http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html

Yamanoteone
źródło
6
Przydatne, ale w żaden sposób nie odpowiada na pytanie.
bzeaman 18.08.16
6

OpenSSH nie zakończy sesji powłoki, która była bezczynna przez pewien czas. To nie jest coś, co robi OpenSSH. Zakończenie bezczynnej sesji powłoki nie jest związane z konfiguracją OpenSSH.

Ustawienia, które wyświetlasz, są związane z limitami czasu, gdy połączenie zostanie zerwane i nie są powiązane z powłoką na zdalnym hoście i tym, co użytkownik robi lub nie robi.

Powłoka zdalnego hosta może zostać zakończona (lub może zostać zabita przez inny proces) po pewnym czasie bezczynności, ale nie jest to związane z konfiguracją usługi SSH na serwerze i klienta SSH.

Związane z:


Aby zrzucić sshdkonfigurację, użyj „rozszerzonego trybu testowego” jako root:

sshd -T

Jest to udokumentowane w tym sshd(8)podręczniku (patrząc OpenSSH_7.7, LibreSSL 2.7.2na OpenBSD tutaj):

-T

Tryb rozszerzonego testu. Sprawdź poprawność pliku konfiguracyjnego, wypisz efektywną konfigurację na standardowe wyjście, a następnie zakończ . Opcjonalnie można zastosować reguły dopasowania, określając parametry połączenia za pomocą jednej lub więcej -Copcji.

Ta opcja została dodana do sshdOpenSSH 5.1 / 5.1p1 w 2008 roku.

Kusalananda
źródło
3

Jeśli warunkiem jest zamknięcie połączenia SSH po okresie bezczynności, same powłoki dostarczają zmienne limitu czasu.

Do bash:

TMOUT: Jeśli ustawiona jest wartość większa niż zero, TMOUT jest traktowany jako domyślny limit czasu dla wbudowanego odczytu. Polecenie wyboru kończy się, jeśli dane wejściowe nie pojawią się po upływie TMOUT sekund, gdy dane wejściowe pochodzą z terminala. W powłoce interaktywnej wartość jest interpretowana jako liczba sekund oczekiwania na dane wejściowe po wydaniu monitu podstawowego. Bash kończy się po odczekaniu tej liczby sekund, jeśli dane wejściowe nie zostaną dostarczone.

przetestuj to, uruchamiając TMOUT=10i poczekaj 10 sekund, aby zamknąć połączenie.

Dla tcsh:

Zmienna powłoki autologout może być ustawiona na wylogowanie lub zablokowanie powłoki po określonej liczbie minut bezczynności.

W tcsh składnia do ustawiania limitu czasu na dziesięć minut to set autologout=10. To nie działa w oryginalnym csh.

Sandeep Kumar Singh
źródło
-2

Jeśli chcesz, aby limit czasu wynosił 10 sekund dla wszystkich, wykonaj następujące czynności dla konfiguracji serwera (sshd_config):

ClientAliveInterval 10
ClientAliveCountMax 0

Jeśli chcesz, aby limit czasu wynosił 10 sekund dla klientów lokalnych, wykonaj następujące czynności dla konfiguracji klienta (ssh_config):

ServerAliveInterval 10
ServerAliveCountMax 0

Jeśli parametr AliveCountMax jest niezerowy, prawdopodobnie nie zadziała, ponieważ serwer odpowie resetem timera (chyba że wystąpi problem z połączeniem). Możesz to zobaczyć, uruchamiając klienta ssh z włączonym debugowaniem.

JohnA
źródło