Терминал ssh всегда зависает через ~ 2 минуты бездействия

У меня есть удаленный сервер на ubuntu 20, а локально я использую ubuntu 18. Немного нерешенный вопрос, так как я не уверен, какие подробности публиковать для диагностики моей проблемы ...

Я без проблем могу подключиться к удаленному серверу по ssh. Но если окно простаивает ~ 2 минуты, оно зависает, и я ничего не могу сделать. Я должен постоянно открывать новые соединения и закрывать старые окна.

Звучит знакомо? Как я могу диагностировать или исправить?

2
задан 4 June 2021 в 16:22

3 ответа

Из приведенной ниже статьи. Замораживание терминала может происходить как намеренно, так и в обратном порядке. Но, судя по тому, что вы упомянули, похоже, что это происходит после бездействия. Возможно, попробуйте разморозить терминал, как показано ниже, а не завершать окно.

Как заморозить окно терминала в Linux

  1. Вы можете заморозить окно терминала в системе Linux, набрав Ctrl+S
  2. Вы можете отменить заморозку, набрав Ctrl+Q
0
ответ дан 28 July 2021 в 11:32

Просто мысль. Если между вами и вашим сервером установлен брандмауэр, он может быть неправильно настроен и использовать способ сокращения времени ожидания TCP.

Таймаут TCP происходит, когда брандмауэр не обнаруживает никакого трафика через соединение и, таким образом, считает его завершенным. Когда клиент пытается использовать TCP-соединение, брандмауэр не разрешает это, так как ожидает новый SYN-пакет.

Обычно таймаут TCP не должен быть настроен на время менее одного часа.

0
ответ дан 28 July 2021 в 11:32

В вашей ситуации может потребоваться использование функции "keep alive", настраиваемой в демоне ssh сервера. По умолчанию она отключена. Сохраните копию оригинального файла /etc/ssh/sshd_config на вашем сервере 20.04, затем отредактируйте его, найдя эти строки и изменив их, как показано:

Измените это:

#TCPKeepAlive yes

На это:

TCPKeepAlive yes

и измените это:

#ClientAliveInterval 0

На это (вы упомянули ~120 секунд в качестве проблемной точки, поэтому делаем 100):

ClientAliveInterval 100

Перезапустите службу sshd или перезагрузитесь, чтобы изменения вступили в силу.

Вы можете проверить с помощью tcpdump, наблюдая за "живыми" пакетами. Однако вам придется запустить tcpdump локально на вашем сервере 20.04, иначе вы получите поток пакетов от вашего собственного SSH-соединения. Пример (при 10 секундах на пакет "keep alive"):

sudo tcpdump -n -tttt
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp3s0, link-type EN10MB (Ethernet), capture size 262144 bytes
2021-06-04 15:04:57.551414 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [P.], seq 1949276260:1949276320, ack 1484187791, win 501, length 60
2021-06-04 15:04:57.551947 IP 192.168.111.122.53176 > 192.168.111.136.22: Flags [P.], seq 1:37, ack 60, win 8208, length 36
2021-06-04 15:04:57.551986 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [.], ack 37, win 501, length 0
2021-06-04 15:05:07.562203 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [P.], seq 60:120, ack 37, win 501, length 60
2021-06-04 15:05:07.562681 IP 192.168.111.122.53176 > 192.168.111.136.22: Flags [P.], seq 37:73, ack 120, win 8208, length 36
2021-06-04 15:05:07.562716 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [.], ack 73, win 501, length 0
2021-06-04 15:05:17.572944 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [P.], seq 120:180, ack 73, win 501, length 60
2021-06-04 15:05:17.573550 IP 192.168.111.122.53176 > 192.168.111.136.22: Flags [P.], seq 73:109, ack 180, win 8208, length 36
2021-06-04 15:05:17.573581 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [.], ack 109, win 501, length 0
2021-06-04 15:05:27.583815 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [P.], seq 180:240, ack 109, win 501, length 60
2021-06-04 15:05:27.584345 IP 192.168.111.122.53176 > 192.168.111.136.22: Flags [P.], seq 109:145, ack 240, win 8208, length 36
2021-06-04 15:05:27.584382 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [.], ack 145, win 501, length 0
2021-06-04 15:05:37.594578 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [P.], seq 240:300, ack 145, win 501, length 60
2021-06-04 15:05:37.595213 IP 192.168.111.122.53176 > 192.168.111.136.22: Flags [P.], seq 145:181, ack 300, win 8207, length 36
2021-06-04 15:05:37.595260 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [.], ack 181, win 501, length 0
2021-06-04 15:05:47.605476 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [P.], seq 300:360, ack 181, win 501, length 60
2021-06-04 15:05:47.606003 IP 192.168.111.122.53176 > 192.168.111.136.22: Flags [P.], seq 181:217, ack 360, win 8207, length 36
2021-06-04 15:05:47.606039 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [.], ack 217, win 501, length 0

Вы также можете проверить без настройки "keep alive", используя ping с различными интервалами, если не хотите узнать точное ограничение по времени. Пример:

doug@s19:~/freq-scalers$ ping -i 100 192.168.111.1
PING 192.168.111.1 (192.168.111.1) 56(84) bytes of data.
64 bytes from 192.168.111.1: icmp_seq=1 ttl=64 time=0.210 ms
64 bytes from 192.168.111.1: icmp_seq=2 ttl=64 time=0.269 ms
^C
--- 192.168.111.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 103912ms
rtt min/avg/max/mdev = 0.210/0.239/0.269/0.029 ms

Изменяйте интервал, чтобы найти точку отказа.

2
ответ дан 28 July 2021 в 11:32

Другие вопросы по тегам:

Похожие вопросы: