2016-08-30 2 views
1

SSH 연결 (루비의 Net::SSH 라이브러리)을 열고 명령을 실행 한 다음 연결을 종료하는 장기 실행 프로세스 (가끔 2 시간 이상)가 있습니다. 이것은 오래된 VM 환경에서 잘 동작합니다. 방금 코드를 GKE의 Docker 이미지로 이식했고 이제는 SSH 연결이 열리지 않습니다. 이것은 약 30 분 이상 실행되는 작업에서만 발생하는 것으로 보입니다.SSH 연결이 끊어지지 않음

양쪽 끝에서 원격/서버 끝 (/var/log/secure)에서 연결이 설정되고 세션이 열리고 세션이 닫힌 것을 확인할 수 있습니다. netstat -a으로 연결이 더 이상 표시되지 않음을 알 수 있습니다. 하지만 로컬/클라이언트 쪽에서는 netstat -a이 연결이 여전히 "ESTABLISHED"임을 보여줍니다. 어떤 이유로 그것은 연결 해제의 통지를 받고 있지 않습니다. 이 하나의 환경에서 작동

은 감안하지 다른, 나는 문제가 Net::SSH뿐만 아니라 다른 몇 가지 구성 또는 다른 어떤 네트워킹에을 생각하지 않습니다.

나는 keep-alive를 클라이언트 측 코드에 추가하려고 시도했다. (keep-alive는 클라이언트가 서버가 더 이상 연결되어 있지 않을 때 감지 할 것이라고 생각했기 때문에) 차이 : 유사

Net::SSH.start(Settings.ssh.host, Settings.ssh.user, options) do |ssh| 
    ssh.send_global_request("[email protected]") 
    response = ssh.exec!(cmd) 
    end 

, 나는 연결 유지 (per this SO answer)를 포함하는 서버에 sshd 업데이트, 그러나 그것은 보이지 않는다 그것을 해결 한합니다 :

TCPKeepAlive yes 
ClientAliveInterval 60 
ClientAliveCountMax 3 

답변

0

음, 해당 설정을 표시 클라이언트 연결을 유지하기위한 서버 구성 이 문제가 해결되었습니다. 나는 SSHD 서버 (/etc/init.d/sshd reload)를 다시로드 한

TCPKeepAlive yes 
ClientAliveInterval 60 
ClientAliveCountMax 3 

하지만 그 트릭을 할 것 같지 않은 : 그래서 서버 측이 추가. 서버를 다시 시작하면 (/etc/init.d/ssh restart) 차이가있는 것으로 보입니다.

관련 문제