Aby utrzymać połączenie przy życiu , możesz sprawdzić w /etc/ssh/ssh_configwierszu, w którym jest napisane ServerAliveInterval, że mówi Ci, jak często (w sekundach) twój komputer będzie wysyłał zerowy pakiet, aby utrzymać połączenie przy życiu. Jeśli masz tam 0, co oznacza, że twój komputer nie próbuje utrzymać połączenia przy życiu (jest wyłączony), w przeciwnym razie mówi ci, jak często (w sekundach) wysyła wspomniany pakiet. Spróbuj wprowadzić 120 lub 240, jeśli nadal zabija twoje połączenie, możesz obniżyć, może do 5, jeśli z tym numerem tak się nie stanie, może to twój router zrzuca połączenie do wolnej pamięci.
Aby go zabić, gdy się rozłączy , możesz użyć znaku ucieczki ssh:
~.
Oznacza to, że naciśnij tyldę, a następnie kropkę, jeśli nie działa, naciśnij klawisz Enter przed naciśnięciem tego przycisku, co spowoduje natychmiastowe zakończenie połączenia.
Ok, możesz zabić połączenie ~., świetna wskazówka! Ale co to właściwie robi?
CousinCocaine
Jedyne, co mnie pomieszało, to to, czy byłam mokra czy nie, musiałem zrestartować sshd, ale wygląda na to, że samo wyjście z sesji i ponowne połączenie
załatwiło sprawę
Często ~. nie działa dla mnie przez kilka minut. Dlaczego?
Sridhar Sarnobat
2
Lokalizacja ssh_configznajduje się /etc/ssh/ssh_configw systemie Mac OS X. Sam bym edytował odpowiedź, ale nie mam wystarczającej liczby przedstawicieli na tej stronie, aby to zrobić.
Erik B,
powinienem umieścić to w kliencie lub serwerze? Myślę, że klient, ale może być jaśniejszy.
EralpB,
23
Możesz:
Skonfiguruj system dla całego połączenia, edytując: / etc / ssh / ssh_config
I dodaj wiersz:
ServerAliveInterval10
Lub na serwer ~ / .ssh / config
Host keepsdroppingme.com
ServerAliveInterval10
Co to w zasadzie wysyła, utrzymuje pakiet przy życiu, co 10 sekund ...
Możesz także spróbować użyć niesamowitego projektu mosh . Z wdzięcznością poradzi sobie z utratą sieci, przejściem w tryb uśpienia itp. I szczęśliwie przywróci połączenie, gdy znów będziesz mieć działającą sieć.
Kolejnym bardziej uświęconym rozwiązaniem jest użycie tmux na zdalnym komputerze. W takim przypadku nadal możesz dostać zepsutą rurę, ale jeśli ponownie połączysz swoją powłokę, a aplikacje będą czekać tak, jak je opuściłeś.
Różne odpowiedzi tutaj są sprzeczne, jeśli chodzi o dokładną ścieżkę do plików konfiguracyjnych. Może jest inaczej w różnych uniksach? Sugeruję przeczytanie stron podręcznika systemowego w twoim systemie!
W man ssh (1) wyszukaj tekst: config . W moim systemie mam do wyboru pliki konfiguracyjne dla całego systemu lub dla tego użytkownika (a ścieżki są dziwnie różne).
W man ssh_config (5) wyszukaj tekst: żywy . W moim systemie wygląda na to, że muszę ustawić zarówno ServerAliveInterval, jak i ServerAliveCountMax .
Dla mnie, w macOS 10.12 Sierra, zadziałało umieszczenie następujących dwóch wierszy w ~ / .ssh / config:
ServerAliveInterval20ServerAliveCountMax180
Teraz mogę ssh na moim serwerze Ubuntu 16.04 bez rozłączania przez 20 * 180 sekund = 1 godzinę. Uczyniłem mój dzień!
Właśnie rozwiązałem ten problem, dodaj następujące wiersze $HOME/.ssh/config.
Host*ServerAliveInterval120TCPKeepAlive no
Ustawienie TCPKeepAlive nomówi klientowi, aby po prostu założył, że połączenie jest nadal dobre, dopóki nie zostanie udowodnione inaczej przez żądanie użytkownika, co oznacza, że tymczasowe zerwanie połączenia, gdy twój termin ssh jest bezczynny w tle, nie zabije połączenia.
~.
, świetna wskazówka! Ale co to właściwie robi?ssh_config
znajduje się/etc/ssh/ssh_config
w systemie Mac OS X. Sam bym edytował odpowiedź, ale nie mam wystarczającej liczby przedstawicieli na tej stronie, aby to zrobić.Możesz:
Skonfiguruj system dla całego połączenia, edytując: / etc / ssh / ssh_config I dodaj wiersz:
Lub na serwer ~ / .ssh / config
Co to w zasadzie wysyła, utrzymuje pakiet przy życiu, co 10 sekund ...
źródło
Możesz także spróbować użyć niesamowitego projektu mosh . Z wdzięcznością poradzi sobie z utratą sieci, przejściem w tryb uśpienia itp. I szczęśliwie przywróci połączenie, gdy znów będziesz mieć działającą sieć.
Kolejnym bardziej uświęconym rozwiązaniem jest użycie tmux na zdalnym komputerze. W takim przypadku nadal możesz dostać zepsutą rurę, ale jeśli ponownie połączysz swoją powłokę, a aplikacje będą czekać tak, jak je opuściłeś.
źródło
Różne odpowiedzi tutaj są sprzeczne, jeśli chodzi o dokładną ścieżkę do plików konfiguracyjnych. Może jest inaczej w różnych uniksach? Sugeruję przeczytanie stron podręcznika systemowego w twoim systemie!
W man ssh (1) wyszukaj tekst: config . W moim systemie mam do wyboru pliki konfiguracyjne dla całego systemu lub dla tego użytkownika (a ścieżki są dziwnie różne).
W man ssh_config (5) wyszukaj tekst: żywy . W moim systemie wygląda na to, że muszę ustawić zarówno ServerAliveInterval, jak i ServerAliveCountMax .
Dla mnie, w macOS 10.12 Sierra, zadziałało umieszczenie następujących dwóch wierszy w ~ / .ssh / config:
Teraz mogę ssh na moim serwerze Ubuntu 16.04 bez rozłączania przez 20 * 180 sekund = 1 godzinę. Uczyniłem mój dzień!
źródło
Automatycznie podłącz ponownie ssh po uśpieniu lub przerwie w Wi-Fi
Zainstaluj autossh z MacPorts lub Homebrew:
brew install autossh
Otwórz terminal i uruchom
autossh -M 20000 -f [SSH ARGUMENTS GO HERE]
Odłącz Wi-Fi lub uśp komputer Mac.
Po ponownym połączeniu z siecią Wi-Fi sesja ssh automatycznie się ponownie połączy.
Automatycznie ssh po zalogowaniu
Jon Stacey napisał post na blogu o automatycznej aktywacji sesji ssh po zalogowaniu.
Zainstaluj autossh z MacPorts lub Homebrew:
brew install autossh
Utwórz przepływ pracy Automatora za pomocą skryptu bash.
źródło
Dodaj te dwie linie do
/etc/ssh/ssh_config
:źródło
Właśnie rozwiązałem ten problem, dodaj następujące wiersze
$HOME/.ssh/config
.Ustawienie
TCPKeepAlive no
mówi klientowi, aby po prostu założył, że połączenie jest nadal dobre, dopóki nie zostanie udowodnione inaczej przez żądanie użytkownika, co oznacza, że tymczasowe zerwanie połączenia, gdy twój termin ssh jest bezczynny w tle, nie zabije połączenia.źródło