проблема
При работе apt-get install
в неинтерактивном сеансе SSH сеанс никогда не закрывается. Пример:
ssh user@target "sudo apt-get -y install my_package"
Он my_package
действительно установлен правильно, но сессия SSH просто болтается.
Вопрос
Есть ли флаг для прохождения SSH, чтобы попасть apt-get
на работу?
Дополнительная информация
контекст
Удаленная установка используется для автоматического развертывания пакета на сервере интеграции. Как только мы вносим некоторые изменения кода в репозиторий, задание извлекает код, создает пакет и развертывает его при интеграции, чтобы проверить, что все работает хорошо (с точки зрения развертывания).
Уже пробовал и заметки
- Тот же самый сеанс SSH, выполняющийся,
apt-get update
закрывается чисто. Обратите внимание, чтоapt-get update
не является интерактивным, аapt-get install
есть. Это может свидетельствовать о том, что интерактивность является проблемой. - Команда как
ssh user@target "sudo apt-get install my_package && echo Hello"
никогда не достигаетecho
. debconf
жалуется, что не может найти хороший внешний интерфейс (Display, Readline) и возвращается к Teletype (хотя Readline доступен).- Что касается внешнего интерфейса debconf, переход
-t
на TTY с SSH не помогает. Ни одинDEBIAN_FRONTEND=noninteractive
. - Все было сделано на Ubuntu 12_04 LTS.
ssh user@target
команды из оболочки), она работает правильно?Ответы:
Следующий ответ на SF сделал свое дело:
ssh не может выполнить удаленную команду при запуске из скрипта cron bash
В
-t
флаг силы распределения псевдо-терминал, за исключением , возможно , когда нет TTY локально. Но прохождение флага дважды, как в,-t -t
только делает вид, что делает это. И это решило проблему.Смотрите документацию по SSH:
Теперь, почему это работает? Оказывается,
debconf
больше не жалуются на фронтенд в логах. Поэтому я считаю, что двойные-t
наборы (приманки?) Поdebconf
мере необходимости, что позволяетapt-get install
завершить, чтобы чисто завершить сеанс SSH.источник
Поскольку я просмотрел это, это может сделать работу. Вызов любой команды должен сопровождаться exit и heredoc. Нашел решение, но лично не пробовал.
Оригинальный ответ приходит отсюда: http://www.thetechrepo.com/main-articles/529-execute-a-command-remotely-over-ssh-and-then-close-the-connection
источник
ssh user@host free -m
в моей целевой среде, и это работает как шарм. Я собираюсь попробовать рекомендацию дальше.Под Debian / Jessie я был успешным с этой командой:
Но, возможно, вам стоит подумать об использовании ansible для этой и других перспективных задач http://docs.ansible.com/ansible/apt_module.html
источник