У меня есть длительный процесс (иногда> 2 часа), который открывает соединение SSH (библиотека ruby's Net::SSH
), запускает команду, а затем закрывает соединение. Это отлично работало в нашей старой среде VM. Я только что портировал код на изображения Docker в GKE, и теперь соединения SSH закрываются. Это, похоже, происходит только для рабочих мест, которые работают более 30 минут.Соединение SSH не удается отключить
Я проверил на обоих концах и на удаленном/серверном конце (в /var/log/secure
) Я вижу, что соединение установлено, сеанс открыт, а затем закрыт. С netstat -a
Я вижу, что соединения больше не указаны. Но на локальном/клиентском конце netstat -a
показывает соединения, все еще «ESTABLISHED». По какой-то причине он не получает уведомления об отключении.
Учитывая, что это работает в одной среде, а не иначе, я не думаю, что проблема в Net::SSH
, а в некоторой конфигурации, которая отличается или какой-то сети, которая отличается.
Я попытался добавить к клиенту код keep-alive (при том, что keep-alive заставит клиента обнаруживать, когда сервер больше не подключен), но это, похоже, не делает разница:
Net::SSH.start(Settings.ssh.host, Settings.ssh.user, options) do |ssh|
ssh.send_global_request("[email protected]")
response = ssh.exec!(cmd)
end
Точно так же, как я обновил sshd
на сервере включить поддержания активности (per this SO answer), но это, кажется, не разрешили его:
TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 3