【问题标题】:SSH connection fails to disconnectSSH 连接断开失败
【发布时间】:2017-01-06 21:09:19
【问题描述】:

我有一个长时间运行的进程(有时 > 2 小时),它打开一个 SSH 连接(ruby 的 Net::SSH 库),运行一个命令,然后关闭连接。这在我们旧的 VM 环境中运行良好。我刚刚将代码移植到 GKE 中的 Docker 映像,现在 SSH 连接卡在打开状态。这似乎只发生在运行时间超过 30 分钟的作业上。

我检查了两端,在远程/服务器端(/var/log/secure)我可以看到连接建立,会话打开,然后会话关闭。使用netstat -a 我可以看到不再列出连接。但是在本地/客户端,netstat -a 显示连接仍然​​“已建立”。由于某种原因,它没有收到断开连接的通知。

鉴于这适用于一种环境而不是另一种环境,我不认为问题出在Net::SSH,而在于某些不同的配置或某些不同的网络。 p>

我尝试在客户端代码中添加保持活动状态(认为保持活动状态会触发客户端检测服务器何时不再连接),但这似乎没有什么区别:

  Net::SSH.start(Settings.ssh.host, Settings.ssh.user, options) do |ssh|
    ssh.send_global_request("keep-alive@openssh.com")
    response = ssh.exec!(cmd)
  end

同样,我在服务器上更新了 sshd 以包含 keep-alive (per this SO answer),但这似乎并没有解决它:

TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 3

【问题讨论】:

    标签: ssh docker net-ssh


    【解决方案1】:

    看来,设置服务器配置以保持客户端连接有效解决了这个问题。所以将它添加到服务器端:

    TCPKeepAlive yes
    ClientAliveInterval 60
    ClientAliveCountMax 3
    

    我已经重新加载了 sshd 服务器 (/etc/init.d/sshd reload) 但这似乎没有奏效。重新启动服务器 (/etc/init.d/ssh restart) 似乎确实有所作为。

    【讨论】:

      猜你喜欢
      • 2016-08-26
      • 2020-10-26
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多