SSH 连接失败断开

SSH connection fails to disconnect

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

我检查了两端,在 remote/server 端(在 /var/log/secure 中)我可以看到连接已建立,会话打开,然后会话关闭。使用 netstat -a 我可以看到不再列出连接。但在 local/client 端,netstat -a 显示连接仍然​​ "ESTABLISHED"。由于某种原因,它没有收到断开连接的通知。

考虑到这在一个环境中而不是在另一个环境中有效,我 认为 问题不在 Net::SSH 中,而是在某些不同的配置或某些配置中不同的网络。

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

  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 以包含保持活动状态 (),但这似乎并没有解决它:

TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 3

好吧,设置服务器配置以保持客户端连接活动似乎解决了这个问题。所以将其添加到服务器端:

TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 3

我重新加载了 sshd 服务器 (/etc/init.d/sshd reload),但这似乎没有用。重新启动服务器 (/etc/init.d/ssh restart) 似乎有所不同。