SSH连接无法断开连接

我有一个长期运行的进程(有时> 2小时),打开一个SSH连接(ruby的Net::SSH库),运行一个命令,然后closures连接。 这在我们的旧VM环境中运行良好。 我只是将代码移植到GKE中的Docker镜像,现在SSH连接被打开了。 这似乎只发生超过30分钟左右的工作。

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

鉴于这在一个环境,而不是另一个工作,我不认为这个问题是在Net::SSH ,而是在一些configuration是不同的或一些networking是不同的。

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

  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( 按照这个SO回答 ),但似乎没有解决它:

 TCPKeepAlive yes ClientAliveInterval 60 ClientAliveCountMax 3 

那么,似乎设置服务器configuration,以保持客户端连接活着解决这一点。 所以把这个添加到服务器端:

 TCPKeepAlive yes ClientAliveInterval 60 ClientAliveCountMax 3 

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