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
) 似乎有所不同。
我有一个很长的 运行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
) 似乎有所不同。