Linux: ssh rozłącza nieaktywną sesję

19-kwi-2022

Objaw:

Połączenie ssh jest nawiązywane z komputera z Linux do innego komputera Linux. Po pewnym czasie nieaktywności sesja sie „blokuje”, a po pewnym czasie pojawia się komunikat o rozłączeniu.

Timeout, server 18.184.154.201 not responding.

Przyczyna:

Kiedy w połączeniu ssh nic się nie dzieje, to jedna ze stron (klient lub serwer) może takie połączenie po swojej stronie zakończyć. Jeśli do rozłączenia dochodzi po stronie serwera, to nieświadomy klient przez pewien czas może próbować nawiązać to połączenie spowrotem. To właśnie obserwowane „zablokowanie” sesji. Kiedy tego połączenia nie udaje się nawiązać przez dłuższy czas, to klient się poddaje i zwraca wspomniany błąd.

Naprawa:

Na serwerze należy wyedytować plik /etc/ssh/sshd_config

W nim należy włączyć nastęþujące linie:

ClientAliveInterval 60
TCPKeepAlive yes
ClientAliveCountMax 10000
  • ClientAliveInterval – określa, co ile sekund należy wysłać do klienta pusty pakiet
  • TCPKeepAlive – powoduje przesłanie informacji o podtrzymywaniu połączenia do firewalli przez które mogą przechodzić pakiety między klientem i serwerem
  • ClientAliveCountMax – ile razy ponowić wysyłkię pustego pakiety mimo braku odpowiedzi ze strony klienta.

Po zmianach w pliku konfiguracyjnym należy zrestartować usługę ssh:

sudo systemctl restart sshd

Na kliencie należy z kolei w tym samym pliku wykonać następujące zmiany:

Host *
ServerAliveInterval 100
  • ServerAliveInterval – co jaki czas klient ma wysyłać do serwera pusty pakiet

W moim przypadku problem udało się rozwiązać 🙂

 

 

 

Komentarze są wyłączone

Autor: Rafał Kraik