我已按如下方式設定 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
嚴格來說這不是我的問題的解決方案,但至少我可以透過在另一個 shell 中運行一個進程來解決這個問題,該進程每秒並行登入遠端伺服器,例如
while true ; do ssh <server> "date; sleep 1s"; done
我不知道為什麼,但它有效地防止了我上面最初的問題中提出的問題。