Czy istnieje sposób na połączenie się z odłączoną sesją ssh? Mamy problemy z połączeniem sieciowym ze zdalną witryną, nad którą pracujemy osobno; jednak w międzyczasie mamy do czynienia z dużą liczbą rozłączeń z powodu utraconych pakietów podczas połączenia z serwerami w zdalnej lokalizacji. Wiele razy sesja pozostaje aktywna przez jakiś czas, a czasem zdarza się, że jest w trakcie akcji (edycja pliku, uruchomienie jakiegoś procesu itp.), Do której muszę wrócić, a nie uruchomić ponownie, jeśli to możliwe.
linux
ssh
gnu-screen
Blady koń
źródło
źródło
Odpowiedzi:
AKTUALIZACJA: Aby uzyskać rzeczywistą odpowiedź, zobacz odpowiedź zero_r poniżej
To nie jest odpowiedź, ale obejście. Użyj ekranu .
Po pierwszym zalogowaniu uruchom ekran. Otrzymasz kolejną powłokę, uruchom w niej polecenia. Jeśli jesteś rozłączony, proces ekranowania utrzymuje terminal przy życiu, aby twoja powłoka i uruchomione procesy nie upadły. Po ponownym połączeniu uruchom „screen -r”, aby wznowić.
Konfiguracja i korzystanie z ekranu ma jeszcze wiele innych zalet, ale powyższe powinno rozwiązać problem.
źródło
screen
jest już zainstalowany na moim Ubuntu 12.x, więc jeśli nie jesteś pewien, po prostu wypróbuj to polecenie, ponownie nawiązał połączenie i wznowił proces aktualizacji do-release : sudo screen -D -rsudo
należy używać tylko wtedy, gdy oryginalna sesja ekranowa została zainicjowana za pomocą sudo. W przeciwnym razie powróci, jakby nie istniała żadna sesja ekranowa:There is no screen to be detached
screen -r
było dokładnie to, czego szukasz.Spróbuj ustawić ClientAliveInterval (np. 60) i TCPKeepAlive (tak lub nie) na odpowiednie wartości na serwerze sshd.conf.
To powinno utrzymać twoją sesję przy życiu, nawet jeśli połączenie zostanie utracone na kilka minut.
źródło
Jak wspomniano powyżej, GNU Screen jest właściwą drogą. Umożliwi to przeprowadzenie „sesji ekranowej” na zdalnym urządzeniu, w której można uruchamiać wiele poleceń za pośrednictwem wielu „okien ekranowych”. To po prostu rozłączy się, jeśli twoje macierzyste połączenie SSH umrze, utrzymując wszystkie podprocesy działające w nim przy życiu i dobrze.
„
man screen
” jest twoim przyjacielem jak zwykle, a pakiet systemu operacyjnego powinien zostać nazwany „screen
”, jeśli nie jest zainstalowany domyślnie.Podstawy to:
Rozpocznij sesję ekranową (na zdalnym hoście):
Odłącz od sesji screen: CTRL-A,d
Ponownie połącz się z sesją ekranową po ponownym zalogowaniu:
Otworzyć kolejne okno „” ekranu: CTRL-A,c
Cykl przez ciebie otwarte okna ekran: CTRL-A,space
Istnieje wiele fajnych rzeczy, które możesz zrobić z ekranem. Używam go od ponad 10 lat i wciąż odkrywam nowe funkcje. To moje ulubione narzędzie uniksowe.
źródło
Nie mogę uwierzyć, że nikt nie wspomniał o MOSH ;
Mosh to oddzielny protokół, który może podłączyć się do procesu logowania SSH, utrzymuje sesję przy życiu po dniach rozłączenia, zmianie adresu IP, dużym opóźnieniu i tak dalej. Wyjaśniono to na stronie głównej lepiej niż potrafię to wyjaśnić, więc skopiowałem poniższy opis. Moje doświadczenia i porady są takie, że używam go na telefonie komórkowym z Androidem, jest to oszczędność życia podczas podróży i SSH'ingu. To samo dotyczy mojego laptopa, na przykład na uwięzi z telefonem komórkowym w pociągu. Polecam kompilowanie ze źródła, aby uzyskać najnowszą wersję, wersja repo dla mnie w Ubuntu ma kilka niedogodności, które zostały naprawione w najnowszej wersji (w momencie pisania).
Funkcje ze strony:
Zmień adres IP. Pozostań w kontakcie : Mosh automatycznie wędruje podczas przechodzenia między połączeniami internetowymi. Korzystaj z Wi-Fi w pociągu, Ethernetu w hotelu i LTE na plaży: będziesz zalogowany. Większość programów sieciowych traci połączenie po roamingu, w tym SSH i aplikacje internetowe, takie jak Gmail. Mosh jest inny.
Sprawia , że masz słodkie sny : dzięki Mosh możesz uśpić laptopa i obudzić go później, utrzymując nienaruszone połączenie. Jeśli połączenie internetowe zostanie zerwane, Mosh ostrzeże Cię - ale połączenie zostanie wznowione po powrocie usługi sieciowej.
Pozbądź się opóźnień w sieci : SSH czeka na odpowiedź serwera, zanim pokaże ci własne pisanie. To może zrobić kiepski interfejs użytkownika. Mosh jest inny: daje natychmiastową odpowiedź na pisanie, usuwanie i edycję linii. Robi to adaptacyjnie i działa nawet w programach pełnoekranowych, takich jak emacs i vim. W przypadku złego połączenia podkreślone są zaległe prognozy, abyś nie został wprowadzony w błąd.
Brak uprzywilejowanego kodu. Bez demona : Nie musisz być superużytkownikiem, aby zainstalować lub uruchomić Mosh. Klient i serwer to pliki wykonywalne uruchamiane przez zwykłego użytkownika i trwają tylko przez cały czas połączenia.
Ta sama metoda logowania : Mosh nie nasłuchuje na portach sieciowych ani nie uwierzytelnia użytkowników. Klient mosh loguje się na serwerze przez SSH, a użytkownicy przedstawiają te same poświadczenia (np. Hasło, klucz publiczny) jak poprzednio. Następnie Mosh uruchamia serwer mosh zdalnie i łączy się z nim przez UDP.
Działa wewnątrz terminala, ale lepiej : Mosh jest programem wiersza polecenia, takim jak ssh. Możesz go używać w Xterm, gnome-terminal, urxvt, Terminal.app, iTerm, emacs, screen lub tmux. Ale mosh został zaprojektowany od podstaw i obsługuje tylko jeden zestaw znaków: UTF-8. Naprawia błędy Unicode w innych terminalach i SSH.
Control-C działa świetnie : w przeciwieństwie do SSH, oparty na UDP protokół mosh radzi sobie z utratą pakietów z wdziękiem i ustawia częstotliwość klatek na podstawie warunków sieciowych. Mosh nie wypełnia buforów sieciowych, więc Control-C
zawsze działa, aby zatrzymać niekontrolowany proces.
źródło
autossh obserwuje twoje połączenie, a jeśli przestanie działać, połączy się ponownie. Jest bardziej niezawodny niż keepalives. Jeśli połączysz się z sesją ekranową, będziesz kontynuować od miejsca, w którym się rozłączyłeś (zobacz,
rscreen
że pochodzi z autossh)źródło
rscreen
na to.tmux
Ten jest klasykiem. Używaj go, gdy istnieje ryzyko utraty połączenia z terminalem.
Właśnie tak, wróciłeś do akcji.
źródło
Zainstalowałbym i uruchomiłem ekran, żeby naprawić problem. Screen pozwoli ci ponownie połączyć się z poprzednią sesją ekranu.
Poza tym screen pozwala ci robić fajne rzeczy, takie jak dzielenie ekranu, przeglądanie konsoli itp. Tutaj i tutaj możesz znaleźć więcej informacji .
Na początek, jeśli zostaniesz rozłączony, możesz użyć
aby zobaczyć swoje sesje i
aby ponownie połączyć się z odłączonym.
źródło
Jak zauważyli inni, ekran jest na ogół najlepszym rozwiązaniem do tego i dodaje wiele innych przydatnych funkcji.
Możesz skonfigurować swój profil na zdalnym komputerze, aby automatycznie uruchamiał się i / lub ponownie łączył z ekranem podczas logowania, co oszczędza Ci zapomnienia o uruchomieniu ekranu za jednym razem, gdy jest to potrzebne, ponieważ nastąpiło zerwanie połączenia.
Zobacz http://tlug.dnho.net/?q=node/239 (lub wyszukaj w Google wiele innych przykładów wykonanych nieco inaczej).
źródło
bardziej nowoczesna alternatywa dla screena, niestety niedostępna dla niektórych rodzajów „wirtualizacji” (np. w cygwinie możesz mieć „screen”, ale nie „tmux” ze względu na sposób jego zaprojektowania), ale wszędzie tam, gdzie masz możliwość zainstalowania tmux , Zdecydowanie polecam skorzystanie z jednej instancji ekranu.
źródło
Oto inne rozwiązanie nieekranowe.
Taca na szpachlę pozwala to zrobić, ma opcję ponownego połączenia po rozłączeniu, która nie jest normalna ani szpachlowaniem
https://puttytray.goeswhere.com/
jest to (całkowicie otwarte źródło) rozwidlenie kitu z innymi opcjami, przejdź do ustawień połączenia i są 2 opcje, jedna dla „próby ponownego połączenia w przypadku awarii połączenia” i „próby ponownego połączenia przy uruchomieniu”.
źródło
Chociaż screen utrzyma otwartą sesję powłoki na zdalnym serwerze, jeśli sesja ssh spadnie, nie zrobi nic z problemem zerwania połączeń ssh. Jak sugeruje zero_r, spróbuj dostroić połączenie ssh z utrzymywaniem przy życiu i długim czasem oczekiwania.
Sugeruję wyśledzenie przyczyny utraconych pakietów powodujących problemy i naprawienie ich zamiast obejścia tego.
źródło
Czasami zapomniałem też uruchomić ekran i straciłem niedokończoną pracę. W tym przypadku, chociaż nie możemy ponownie dołączyć do zepsutej sesji SSH, ponowne odtworzenie działającego programu na nowym terminalu i wznowienie tego, co robiłeś, jest nadal możliwe dzięki
reptyr
.Po przypadkowym odłączeniu się od sesji SSH, pierwszą rzeczą jest uruchomienie,
screen
aby połączenie nie zostało ponownie zerwane. Następnie w nowej sesji uruchom,ps aux | grep {The process to be resumed}
aby uzyskać PID. Dzięki PID możesz spróbowaćreptyr {PID}
lubreptyr -T {PID}
(jeśli istnieją podprocesy), aby kontynuować pracę.źródło