~/.ssh/config
클라이언트 측에서 SSH 연결을 다음과 같이 구성했습니다.
ServerAliveInterval 1
ServerAliveCountMax 1200
그리고 /etc/ssh/sshd_config
서버 측에서는:
ClientAliveInterval 5
ClientAliveCountMax 1200
그래도 원격 서버에 로그인할 때 연결이 상당히 안정적이라고 생각하지만 약 15~60초 후에 SSH 연결이 계속 끊어지는 것을 볼 수 있습니다. 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
이유는 모르겠지만 위의 초기 질문에서 제기된 문제를 효과적으로 방지합니다.