Mam ServerAliveInterval
i, w przypadku kilku maszyn, również ClientAliveInterval
ustawiłem na 540 w plikach konfiguracyjnych klient / serwer SSH (przypuszczam, że ustawienie większej wartości nie byłoby dobrym pomysłem). Pracuję z wieloma sesjami SSH, które obecnie zawieszają się po kilku minutach.
Jak mogę to naprawić? Chcę, aby sesja w ogóle się nie zawieszała, tak więc jeśli otworzę sesję o godzinie 8 i nie używam jej przez 4 godziny, na przykład nadal będę mógł z niej korzystać ponownie o godzinie 12 bez konieczności ponownego logowania. .
TCPKeepAlive yes
?TCPKeepAlive yes
- zależy od maszyny.autossh
...screen
. Ale wciąż oceniam twoje pytanie, ponieważ mam ten sam problem już po minucie lub dwóch.Odpowiedzi:
Zmiany, które wprowadziłeś
/etc/ssh/ssh_config
i/etc/ssh/sshd_config
są prawidłowe, ale nadal nie przyniosą żadnego efektu.Aby konfiguracja działała, wprowadź następujące zmiany w konfiguracji na kliencie:
/etc/ssh/ssh_config
ServerAliveInterval Klient wysyła do serwera pusty pakiet co 100 sekund, aby utrzymać połączenie przy życiu
Pakiet NULL jest wysyłany przez serwer do klienta. Ten sam pakiet jest wysyłany przez klienta na serwer. Pakiet TCP NULL nie zawiera żadnych flag kontrolnych, takich jak SYN, ACK, FIN itp., Ponieważ serwer nie wymaga odpowiedzi od klienta. Pakiet NULL jest opisany tutaj: https://tools.ietf.org/html/rfc6592
Następnie skonfiguruj część sshd na serwerze.
/etc/ssh/sshd_config
ClientAliveInterval Serwer będzie czekał 60 sekund przed wysłaniem pakietu zerowego do klienta, aby utrzymać połączenie przy życiu
TCPKeepAlive Zapewnia, że niektóre zapory ogniowe nie będą przerywać bezczynnych połączeń.
ClientAliveCountMax Server wyśle żywe wiadomości do klienta, nawet jeśli nie otrzymał żadnej wiadomości z powrotem od klienta.
Na koniec uruchom ponownie
ssh server
service ssh restart
lub wservice sshd restart
zależności od systemu, na którym jesteś.źródło
ServerAliveCountMax
jest również potrzebny, aby był on jak najbardziej niezawodny. I wtedy, gdy obaServerAliveInterval
iClientAliveInterval
są na tyle niskie, nie sądzę, nie będzie żadnej potrzebyTCPKeepAlive
. Dodatkowo, jeśli istnieją jakieś skrzynki środkowe, mogą one nadal utracić stan, nawet jeśli wszystkie wcześniej wspomniane ustawienia są skonfigurowane dokładnie poprawnie. Może pomóc w użyciu MPTCP (jeśli obsługuje go zarówno klient, jak i serwer).ClientAliveInterval
iClientAliveCountMax
są opcje serwera ssh, a więc przeznaczone dlasshd_config
i niessh_config
ssh_config
nowe sesje odczytują ten plik./etc/environment
Plik jest inna sprawa, która ma formatVAR="value"
bez obowiązuje zatemVAR = "value"
byłby nieważny. Pozyskiwanie w/etc/ssh/ssh_config
ten sposób będzie oznaczało:Port 22
lubHost *
które będą traktować je jak poleceniaOsobista sugestia: użyj
screen
na zdalnym hoście; utrzyma połączenie przy życiu tak długo, jak długo pozostanie aktywne w terminalu.Oto, do czego zazwyczaj dodaję, aby
/etc/screenrc
szybko zidentyfikować moje sesje ekranowe:EDYCJA: Wskazówki.
hardstatus
Ciąg pokaże dolną linię statusu, takie jak ten:Bufor przewijania jest również rozszerzony do 8192 linii zamiast zwykłego 1000-1500 (w zależności od dystrybucji).
źródło
screenrc
pliku? Jak skonfigurować system ekranu startowego / tmux zaraz po zalogowaniu?screen
nie utrzymuje połączenia ssh przy życiu. Uruchamia procesy w wirtualnym terminalu niezależnie od terminala użytkownika, z którym się łączysz,ssh
więc proces nie zależy od twojego połączenia. Nadal straciszssh
połączenie, dopóki nie zostanie rozwiązane.screen
, radzę nowym użytkownikom na początektmux
.Z OpenSSH:
Musisz włączyć
zarówno w kliencie ssh_config (np.
/etc/ssh/ssh_config
lub in~/.ssh/config
), jak i docelowym serwerze SSH z uruchomionym OpenSSH (np. / etc / ssh / sshd_config).Więc za każdym razem, gdy twoje połączenie jest bezczynne, OpenSSH wysyła jakiś fałszywy pakiet do docelowego hosta ...
źródło
The default is ''yes'' (to send TCP keepalive messages), and the server will notice if the network goes down or the client host crashes.
...this means that connections will die if the route is down temporarily, and some people find it annoying.
zerwanie"[…] network goes down […] client host crashes […] route is down […]"
są to poważne błędy, których nie może wykryć konfiguracja SSH. Głównym problemem są tutaj bezczynne sesje SSH, a nie awarie sieci. Dlatego podsumowując: - włączTCPKeepAlive yes
zarówno na serwerze, jak i kliencie. - ustawClientAliveInterval
na serwerze - ustawIdleTimeout
na serwerze - ustawClientAliveCountMax
To powinno wystarczyć ...Jeśli problem jest hibernacji laptop lub mniej niż prefekt połączenie sieciowe, polecam użyciu
mosh
która biegnie nadssh
i umożliwia automatyczne ponowne podłączenie.Ze strony :
W połączeniu z
tmux
(lub starszymiscreen
) pozwala mi to połączyćssh
się z serwerem z mojego laptopa i pozostać w kontakcie przez wiele dni, nawet przy zmianie połączeń Wi-Fi i porzuceniu danych mobilnych.źródło
Sprawdź konfigurację sshd na hoście
/etc/sshd_config
dlaIdleTimeout
ustawienia .źródło