Jak zapobiec rozłączaniu się SSH, jeśli był przez jakiś czas bezczynny

48

Mam połączenie ssh z maszyną, która zostaje rozłączona przez tę maszynę po 30 minutach braku wkładu użytkownika. Jeśli jednak zacznę coś takiego top, połączenie pozostanie aktywne. Ponieważ jest to komputer klienta, nie mogę ponownie skonfigurować serwera SSH tego komputera. Dlatego szukam sposobu na automatyczne wykrycie bezczynności i rozpoczęcie czegoś takiego top. Coś w rodzaju „wygaszacza ekranu” dla Basha.

Wiem, że mogę to zrobić screen, ale niestety screennie jest zainstalowany i nie mogę zainstalować oprogramowania. Więc muszę skorzystać z tego, co oferuje Bash.

Wyjaśnij: szukam rozwiązania, które uruchamiam raz po zalogowaniu, a następnie chcę użyć tego terminalu, odejść, wrócić dwie godziny później i kontynuować pracę, nie wpisując niczego przed odejściem. Nie szukam też tunelowania (do tego polecam świetne narzędzie sshuttle )

Jakieś pomysły?

Izaak
źródło
Krótka notatka, aby zrobić czysty ekran i Keepalive, to nie to samo: na przykład, jeśli klient ssh lub serwer zostanie odłączony, twoja sesja ssh zostanie zakończona, nawet jeśli masz włączony KeepAlive, podczas gdy powłoka ekranu nie zostanie zakończona .
MariusMatutiae

Odpowiedzi:

77

Wyjaśnij: szukam rozwiązania, które uruchamiam raz po zalogowaniu, a następnie chcę użyć tego terminalu, odejść, wrócić dwie godziny później i kontynuować pracę, nie wpisując niczego przed odejściem.

Problem polega na tym, że istnieje coś (zwykle firewall lub moduł równoważenia obciążenia), który upuszcza bezczynne sesje. Jeśli skonfigurujesz utrzymanie sesji, będzie ono uniemożliwiać urządzeniom sieciowym uznanie sesji za bezczynną.

Poprawka OpenSSH dla Linux / Unix / Cygwin :
Najprostszą poprawką jest włączenie Keepalives dla klientów ssh; ten przykład wyśle ​​utrzymanie ssh co 60 sekund:

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>

Jeśli chcesz włączyć to we wszystkich sesjach, umieść to w swoim /etc/ssh/ssh_configlub ~/.ssh/config:

ServerAliveInterval 60

Aby uzyskać więcej informacji, zobacz stronę ssh_configpodręcznika

Kit Fix :

Zapisz to w „Ustawieniach domyślnych” PuTTY ...

  • Kliknij Połączenie
  • Wpisz 60 w „Sekundy między pamiątkami”

putty_screenshot

Mike Pennington
źródło
21

Oprócz odpowiedzi Mike'a Pennigtona , chciałbym cię też uświadomić ServerAliveCountMax.

  • ServerAliveIntervalWyśle keepalive co X sekund (domyślnie jest to 0 , co powoduje wyłączenie tej funkcji, jeśli nie jest ustawiona na coś innego).
  • ALE będzie to robione tylko ServerAliveCountMaxraz. Wartość domyślna ServerAliveCountMaxto 3 (patrz manpage ssh_config ).

Przykład: jeśli ustawisz ServerAliveIntervalna 60 i wyjdziesz bez ServerAliveCountMaxzmian, oznacza to, że keepalive utrzyma połączenie tylko przez 3 * 60 = 180 seconds = 3 minuty.

Aby zwiększyć to do np. 2 godzin utrzymywania połączenia przy życiu, możesz:

Na polecenie:

Dlatego powinieneś rozważyć ustawienie

ssh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 120" <SERVER_ADDRESS>

Uporczywy:

Aby był trwały, napisz do /etc/ssh/ssh_config(zastosuje się w całym systemie) lub ~/.ssh/config(zastosuje tylko dla użytkownika):

ServerAliveInterval 60
ServerAliveCountMax 120

Zobacz też:

Murmel
źródło
1
Przepraszam, ale to źle. ServerAliveCountMaxokreśla liczbę żywych komunikatów serwera, które mogą zostać wysłane bez odbierania żadnych wiadomości z serwera. Jeśli chcesz ssh, aby wyjść po zamarza (tak, że można go uruchomić ponownie), należy właściwie ustawić ServerAliveCountMaxna niską liczbę. Zobacz połączony OP strony man .
odrzuć
2

Używam Mobaxterm i również spotkałem się z tym problemem. Mobaxterm jest również dostarczany z opcją utrzymania klienta przy życiu, gdy jest on bezczynny. Idź do Settings -> Configuration -> SSH. Jest sekcja zatytułowana SSH settings, zaznacz opcję SSH keepalive. Wtedy problem powinien zniknąć.

wprowadź opis zdjęcia tutaj

jdhao
źródło
czy „SSH keepalive” działa w wersji darmowej ... moja sesja rozłącza się nawet po sprawdzeniu tej opcji
samshers
Tak to działa. Twój problem może mieć inne przyczyny.
jdhao