2016-08-30 8 views
1

SSH接続(ルビーのNet::SSHライブラリ)を開き、コマンドを実行してから接続を終了する、長時間実行するプロセス(時には> 2時間)があります。これは私たちの古いVM環境でうまくいきました。私はちょうどGKEのDockerイメージにコードを移植しました。そして今、SSH接続は開かれています。これは約30分以上実行されるジョブでのみ発生するようです。SSH接続の切断に失敗する

両端とリモート/サーバー側(/var/log/secure)でチェックしたところ、接続が確立され、セッションが開かれてからセッションが閉じられたことがわかりました。 netstat -aでは、接続がもうリストされていないことがわかります。しかし、ローカル/クライアント側では、netstat -aはまだ接続が「確立済み」であることを示しています。なんらかの理由で、切断の通知が得られません。

これはある環境ではなく、他に動作することを考えると、私は問題がNet::SSHではなく、異なるいくつかの構成または異なるいくつかのネットワークであるとは思いません。

私はキープアライブをクライアント側のコードに追加しようとしましたが(キープアライブでは、サーバーが接続されていないときにクライアントが検出されると考えられていましたが)、違い:

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

まあ、設定と思われますクライアント接続を維持するためのサーバー構成ライブはこれを解決しました。だから、サーバー側にこれを追加する:

TCPKeepAlive yes 
ClientAliveInterval 60 
ClientAliveCountMax 3 

私はSSHDサーバ(/etc/init.d/sshd reload)を再ロードしていたが、それはトリックを行うようには見えませんでした。サーバー(/etc/init.d/ssh restart)を再起動すると違いがあるようです。

関連する問題