Proces SSH nie został zabity na komputerze zdalnym, gdy system zdalny niespodziewanie się rozłączy

8

Mam pytanie, na które nie znalazłem odpowiedzi. Mam dwa komputery, z których oba uruchamiają Ubuntu 12.04. Trzymam jeden z moich komputerów w domu i używam SSH do łączenia się z nim z drugiego („zdalnego”) komputera. Komputer zdalny może bez problemu połączyć się z komputerem domowym. Komputer zdalny ma również SetAliveInterval ustawiony na 60 w / etc / ssh / ssh_config, tak że połączenie nie znika, jeśli odejdę na chwilę od komputera.

Czasami moje połączenie internetowe na moim zdalnym komputerze zostaje przerwane. Przerwy internetowe powodują zamknięcie mojego tunelu SSH (oczywiście). Jednak po przywróceniu połączenia internetowego i ponownym połączeniu z komputerem domowym za pomocą nowego tunelu SSH widzę, #ps axże stary proces połączenia SSH nadal działa. Jest to problem, ponieważ korzystam z zaszyfrowanego katalogu domowego na komputerze domowym, który nie pozwala na ponowne szyfrowanie plików, dopóki nie zostanie przerwane (nieżywe) połączenie SSH.

Czy istnieje sposób ustawienia sshd_config na komputerze domowym, aby automatycznie wykrywał przerwanie połączenia i go przerywał?

J L
źródło

Odpowiedzi:

5

Wypróbuj screen lub tmux . Po stronie serwera lub po obu stronach, jeśli chcesz:

sudo apt-get install tmux

Po zalogowaniu uruchom tmux .

tmux

Jeśli połączenie zostanie zerwane, zaloguj się ponownie przez ssh i ponownie połącz sesję tmux . Aby odkryć numer sesji:

tmux ls

Wynik może być mniej więcej taki:

Okna 0: 1 (utworzone wto 25 grudnia 19:20:40 2012)

Połącz się z sesją numerowaną tmux w następujący sposób:

tmux attach -t 0

Następnie jesteś dokładnie tam, gdzie go zostawiłeś. Nie będziesz musiał zabijać sesji. Czekają tylko na następną wizytę. Lub jeśli chcesz po prostu zabić sesję ...

Po stronie serwera zobacz /etc/ssh/sshd_configustawienia ClientAliveInterval i ClientAliveCountMax . ( man 5 ssh_config)

ClientAliveInterval 300
ClientAliveCountMax 0

Po ich zmianie zgodnie z preferencjami zrestartuj serwer SSH.

sudo /etc/init.d/ssh restart

300 to sekundy (pięć minut).


źródło
Właśnie tego szukałem! Zacznę od ClientAliveInterval i na pewno wypróbuję również tmux. Dziękuję Ci!
JL,
1
Trzecią opcją oprócz Screen i Tmux jest Byobu : strona internetowa , Wikipedia . Ze strony internetowej: „Został pierwotnie zaprojektowany w celu zapewnienia eleganckich ulepszeń funkcjonalnego, prostego, praktycznego ekranu GNU dla dystrybucji serwera Ubuntu. Byobu zawiera teraz ulepszone profile, wygodne skróty klawiszowe, narzędzia konfiguracyjne i przełączane powiadomienia o stanie systemu zarówno dla menedżera okien GNU Screen, jak i bardziej nowoczesnego multipleksera terminali Tmux, i działa na większości dystrybucji Linuksa, BSD i Mac ”.
sierrasdetandil
1

Możesz wypróbować moshZainstaluj mosh , zamiennik SSH zbudowany na SSH. Obsługuje i roaming oraz przerywane połączenia, więc sesja Mosh (SSH) będzie kontynuowana tam, gdzie została przerwana, gdy połączenie internetowe zostanie ponownie ustanowione po przerwie.

Będziesz musiał zainstalować Mosh na obu komputerach.

Bibliografia:

Flimm
źródło