SSH по умолчанию имеют довольно долгие тайм-ауты, значения по умолчанию к тайм-ауту TCP и тайм-аутам TCP по умолчанию длинны.
Любая форма проверки активности на самом деле заставила бы его отбросить соединение раньше, потому что то, когда клиент/сервер видел бы, что сообщения проверки активности не добираются для предназначения для нее, отбросило бы соединение.
Таким образом, пока Ваш IP остается, то же соединение SSH может сохраниться очень долго, это, если нет ничего "продолжающего" заполнить буферы send/recv
Следующий ответ на SF сработал:
ssh не может выполнить удаленную команду при запуске из сценария cron bash
Флаг -t
вызывает псевдо -tty распределение, за исключением, возможно, случаев, когда нет локального TTY. Но передача флага дважды, как в -t -t
, просто делает вид, что делает это. И это решило проблему.
См. Документацию SSH:
-t Принудительное выделение псевдотерминала. Это может использоваться для выполнения произвольных экранных программ на удаленном компьютере, что может быть очень полезно, например, при реализации служб меню. Несколько параметров -t принудительно выделяют tty, даже если ssh не имеет локального tty.
Почему это сработало? Оказывается, debconf
больше не жалуется на интерфейс в журналах.
Насколько я понял, это может помочь. Вызов любой команды должен сопровождаться exit и heredoc. Нашел решение, но лично не пробовал.
ssh user@myremotemachine <<-EOF
free -m
exit
EOF
Исходный ответ приходит отсюда: http://www.thetechrepo.com/main-articles/529-execute-a-command-remotely-over- ssh-and-then-close-the-connection
В debian/jessie я успешно выполнил эту команду:
ssh user@host "TERM=READLINE sudo apt-get install --reinstall less && echo done"
Но, возможно, вам стоит подумать об использовании возможности для этой и других повышающих задач http://docs.ansible.com/ansible/apt_module. html