후속 조치 : 각 서버를 몇 개월 동안 실행 한 것과 같은 일련의 빠른 연결 끊김은 우연의 일치이며 실제 문제를 드러내는 데 도움이됩니다. 다시 연결하지 못한 이유는 AliveInterval 값 (kasperd의 답변) 때문일 것입니다. ExitOnForwardFailure 옵션을 사용하면 다시 연결하기 전에 시간 초과가 올바르게 발생하여 대부분의 경우 문제가 해결됩니다. MadHatter의 제안 (킬 스크립트)은 아마도 모든 것이 실패하더라도 터널을 다시 연결할 수있는 가장 좋은 방법 일 것입니다.
방화벽 뒤에 서버 (A)가 있는데 여러 포트에서 작은 DigitalOcean VPS (B)에 대한 역방향 터널을 시작하여 B의 IP 주소를 통해 A에 연결할 수 있습니다. 터널은 약 3 개월 동안 일관되게 작동했지만 지난 24 시간 동안 갑자기 4 번 실패했습니다. 동일한 작업이 다른 VPS 공급 업체에서 한 달 전에 완벽하게 작동 한 후 갑자기 여러 번의 빠른 오류가 발생했습니다.
머신 A에 자동으로 터널 명령을 실행하는 스크립트가 있습니다 ( ssh -R *:X:localhost:X address_of_B
각 포트 X에 대해) Warning: remote port forwarding failed for listen port X
. 실행되면이라고 말합니다 .
/var/log/secure
서버 에서 sshd로 들어가면 다음 오류가 표시됩니다.
bind: Address already in use
error: bind: Address already in use
error: channel_setup_fwd_listener: cannot listen to port: X
해결하려면 VPS를 재부팅해야합니다. 그때까지 모든 재 연결 시도는 "원격 포트 전달 실패"메시지를 표시하며 작동하지 않습니다. 이제 터널이 멈추기 전에 약 4 시간 만 지속되는 지점에 도달했습니다.
VPS에서 변경된 사항은 없으며 리버스 터널 끝점으로 만 사용되는 일회용 단일 사용자 컴퓨터입니다. CentOS 6.5에서 OpenSSH_5.3p1을 실행 중입니다. 연결이 끊어졌을 때 sshd가 끝에서 포트를 닫지 않는 것 같습니다. 몇 달 동안 거의 완벽한 작동 후에 왜 또는 왜 갑자기 발생하는지 설명하지 못했습니다.
명확히하기 위해 먼저 터널이 실패 한 후 sshd가 포트 수신을 거부하는 이유를 알아야합니다 .sshd는 포트를 열어두고 절대 닫지 않기 때문에 발생합니다. 이것이 주요 문제인 것 같습니다. 나는 예상대로 몇 달간 행동 한 후 (예 : 즉시 포트를 닫고 스크립트를 다시 연결할 수 있도록) 어떻게 작동하는지 확실하지 않습니다.