Невозможно инициализировать диалог frontend: при использовании ssh

52

Я выполняю следующую команду над ssh в среде тестирования от имени root:

ssh <remote_srv> "apt-get autoremove"

В моем sshd_config у меня есть «PermitRootLogin без пароля», и я добавил id_rsa.pub пользователя root в файл author_keys на удаленном сервере.

Тем не менее я получаю следующие ошибки:

debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype

Я просмотрел это на страницах s man, но не мог сосредоточиться на объяснении псевдо-терминов и тт.

Есть ли кто-нибудь, кто может объяснить вышеуказанные ошибки? Я думаю, что это пропущенный вариант, но какой?

Обе платформы являются Ubuntu 14.04 LTS.

twan163
источник

Ответы:

62

Я считаю, что это как-то связано с тем, что apt-get autoremoveон запускается в неинтерактивной оболочке. См. Возможно ли ответить на вопросы диалога при установке в Docker?

Решение состоит в том, чтобы префикс команды с DEBIAN_FRONTEND=noninteractive:

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
Alex
источник
12
Это происходит при использовании apt-get во время установки докера, с добавлением префикса, отлично работает
Нил МакГилл,
Спасибо за комментарий Нил. Я чувствовал, что сбился с пути, но столкнулся с той же проблемой при использовании apt-get во время установки докера.
Qcom
13

Решение Алекса действительно подавляет ошибки, и он почти правильно понял причину, но не позволяет вам отвечать на любые вопросы (что хорошо, когда вы уже набрали ответы и запускаете из сценария, но очень раздражает, когда вы пробуете новые пакеты). ). Основной проблемой является взаимодействие между предположениями, сделанными различными внешними интерфейсами ssh и debconf.

Давайте начнем с SSH. ssh предполагает, что когда вы не указываете удаленную команду, вы хотите указать pty на удаленном конце, а вы указываете удаленный, который вы не делаете (это работает замечательно хорошо в 90% случаев, но только не в этом). Это может быть отменено -tопцией, которая вызывает pty, или -Tопцией, которая не вызывает pty (или соответствующими параметрами файла конфигурации). Кроме того, при использовании pty TERMпеременная окружения копируется (исключения могут касаться проверочной документации для полных данных и официальной формы ввода лотереи). Также следует отметить, что -xопция отключает пересылку X11 и -Xвключает ее.

Debconf сам по себе не имеет требований к интерактивности (по замыслу), но существуют различные интерфейсы, и у каждого свои требования.

Я считаю, что лучше всего выглядит интерфейс gnome (есть также интерфейс ked, с которым я не работал). Для внешнего интерфейса gnome (а также для kde) требуются библиотеки не по умолчанию и сервер X11, поэтому командная строка для принудительного запуска внешнего интерфейса gnome (после установки соответствующих библиотек) будет

ssh -X <remote_srv> "DEBIAN_FRONTEND=gnome apt-get autoremove"

или если вы предпочитаете KDE

ssh -X <remote_srv> "DEBIAN_FRONTEND=kde apt-get autoremove"

Интерфейс диалога (по умолчанию) требует наличия pty и терминала с минимальным уровнем функциональности, указанным в переменной TERM (на практике это все с полным описанием terminfo, кроме тупого).

ssh -t <remote_srv> "TERM=$TERM DEBIAN_FRONTEND=dialog apt-get autoremove"

или же

ssh -t <remote_srv> "apt-get autoremove"

Интерфейс readline имеет менее строгие требования и будет работать с тупыми терминалами, но для него потребуется pty.

ssh -t <remote_srv> "DEBIAN_FRONTEND=readline apt-get autoremove"

Интерфейс редактора зависит от редактора, который будет иметь определенные требования в зависимости от редактора.

ssh -t <remote_srv> "DEBIAN_FRONTEND=editor EDITOR=vi apt-get autoremove"
ssh -X <remote_srv> "DEBIAN_FRONTEND=editor EDITOR=gvim\ -f apt-get autoremove"

У неинтерактивного интерфейса нет требований, но он не задает никаких вопросов (которые могут быть или не быть тем, что вы хотите).

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
hildred
источник
«Интерфейс readline предъявляет менее строгие требования и будет работать с тупыми терминалами, но потребуется pty». Можете ли вы объяснить, как я могу установить pty?
linuxatico
@linuxatico, ssh -tдля получения более подробной информации и других опций смотрите справочную страницу ssh. Также перечитайте второй абзац этого ответа.
hildred