Kiedy łączę się za pośrednictwem ssh z niektórymi serwerami, upływa limit czasu i „zawiesza się” terminal (nie akceptuje danych wejściowych, nie rozłącza się, nie może Ctrl-C zabić procesu ssh lub cokolwiek innego).
Jest to w Ubuntu, gnome-terminal
choć wydaje się, że wstrzymuje wejście / wyjście terminala i nie wpływa na działanie samego oprogramowania GNOME Terminal. Więc mniej błędu gnome-terminal
niż denerwująca niespójność z ssh.
Czy istnieje sposób, aby zapobiec / odzyskać terminal z połączeń ssh, które przekroczyły limit czasu?
ssh
terminal
timeout
gnome-terminal
Kzqai
źródło
źródło
Odpowiedzi:
sshd (serwer) zamyka połączenie, jeśli przez jakiś czas nic nie słyszy od klienta. Możesz od czasu do czasu nakazać klientowi, aby wysyłał do serwera sygnał oznak życia.
Konfiguracja tego znajduje się w pliku
~/.ssh/config
. Aby wysyłać sygnał co cztery minuty do zdalnego hosta, umieść w swoim polu następujące informacje~/.ssh/config
.To właśnie mam w sobie
~/.ssh/config
.Aby włączyć to dla wszystkich hostów, użyj:
Upewnij się także, aby uruchomić
chmod 600 ~/.ssh/config
, ponieważ plik konfiguracyjny nie może być czytelny dla całego świata.źródło
~/.ssh/config
jestNaciśnij Enter, ~, .jeden po drugim, aby odłączyć się od zamarzniętej sesji.
Sekcja „ZNAK UCIECZKI” na stronie man ssh wyjaśnia podstawowe szczegóły.
źródło
EscapeChar ~
w/etc/ssh/ssh_config
(lub~/.ssh/ssh_config
jeśli wolisz).EscapeChar ~
jest już wbudowanym domyślnym.Nawet jeśli nie jest to bezpośrednia odpowiedź na twoje pytanie, jest ściśle związana z twoim problemem. Zamiast próbować utrzymywać połączenie przy życiu (wszystkie połączenia w końcu umierają), możesz użyć multiplekserów terminali, takich jak
screen
i,tmux
które utrzymują sesję w tle, nawet jeśli terminal zostanie rozłączony.Zasadniczo po zalogowaniu się na serwerze SSH natychmiast uruchamiasz się,
screen
aby utworzyć i dołączyć nową sesję:Następnie idź dalej i wykonuj swoją pracę z powłoką, jak zwykle. Teraz, jeśli połączenie zostanie zerwane, kiedy będziesz mógł wrócić do trybu online i ponownie połączyć się z serwerem przez SSH, otrzymasz listę bieżących sesji z:
Aby ponownie dołączyć do sesji:
gdzie
<session>
jest PID lub nazwa sesji. Nastąpi ponowne połączenie z sesją i możesz kontynuować od miejsca, w którym zostało przerwane!Możesz nawet odłączyć sesję i połączyć się ponownie z domu, aby odebrać dokładnie z miejsca, w którym zostało przerwane. Aby odłączyć sesję, której używasz,
C-a
a następnieC-d
(toControl + A
i wtedyControl + D
).Jest też prosty samouczek online .
Używanie
screen
itmux
na zdalnych serwerach jest uważane za najlepszą praktykę i jest wysoce zalecane . Niektóre osoby idą tak daleko, że mająscreen
domyślną powłokę logowania, więc po nawiązaniu połączenia natychmiast rozpoczynają nowąscreen
sesję.źródło
Spróbuj dołączyć
-o ServerAliveInterval=30
do ciągu połączenia (30
oznacza to 30 sekund i oczywiście można to zmienić)źródło
Możesz także ustawić limit czasu bezczynności po stronie serwera SSH:
Plik:
/etc/ssh/ssh_config
Zawartość:
Działa to dokładnie tak samo, jak ustawienie klienta, ale pakiety zerowe są wysyłane z serwera, a nie z klienta.
Uzyskane z:
http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html
źródło
Dla osób, które chcą przede wszystkim zapobiec przekroczeniu limitu czasu przez klienta.
Możesz spróbować ustawić
ConnectTimeout 0
w pliku konfiguracyjnym. Wartość 0 oznacza, że połączenie będzie utrzymywane przy życiu przez czas nieokreślony, chyba że zostanie zamknięte.Twój plik config (lub ssh_config) może wyglądać następująco:
źródło