Я настроил свое SSH-подключение следующим образом: ~/.ssh/config
на стороне клиента
ServerAliveInterval 1
ServerAliveCountMax 1200
и /etc/ssh/sshd_config
на стороне сервера:
ClientAliveInterval 5
ClientAliveCountMax 1200
Тем не менее, при входе на удаленный сервер, хотя я и считаю свое соединение достаточно стабильным, я вижу, что мое SSH-соединение постоянно разрывается примерно через 15–60 секунд. ssh <server> -vvv
всегда заканчивается
...
debug3: send packet: type 80
debug3: receive packet: type 82
debug3: send packet: type 80
debug3: receive packet: type 82
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: receive packet: type 98
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 1
debug3: send packet: type 100
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 1
Connection reset by <IP> port <PORT>
На стороне сервера:
...
debug3: receive packet: type 80
debug1: server_input_global_request: rtype [email protected] want_reply 1
debug3: send packet: type 82
debug3: receive packet: type 80
debug1: server_input_global_request: rtype [email protected] want_reply 1
debug3: send packet: type 82
debug2: channel 0: request [email protected] confirm 1
debug3: send packet: type 98
debug2: channel 0: request [email protected] confirm 1
debug3: send packet: type 98
debug2: channel 0: request [email protected] confirm 1
debug3: send packet: type 98
debug2: channel 0: request [email protected] confirm 1
debug3: send packet: type 98
...
Сервер действительно продолжает попытки. Также параллельно я могу что-то скачать или даже открыть параллельное SSH-подключение к тому же серверу.
Но даже если был короткий сбой, почему клиент SSH не продолжает попытки, а преждевременно завершает работу? Как настроить SSH, чтобы он (действительно) продолжал попытки?
решение1
Это не совсем решение моей проблемы, но, по крайней мере, я могу обойти ее, запустив процесс в другой оболочке, который параллельно подключается к удаленному серверу каждую секунду, например
while true ; do ssh <server> "date; sleep 1s"; done
Не знаю почему, но это эффективно предотвращает проблемы, поднятые в моем первоначальном вопросе выше.