Não foi possível inicializar o frontend: diálogo ao usar ssh

52

Estou executando o seguinte comando sobre ssh em um ambiente de teste, como root:

ssh <remote_srv> "apt-get autoremove"

No meu sshd_config, tenho "PermitRootLogin sem senha" e adicionei o id_rsa.pub da raiz ao arquivo allowed_keys no servidor remoto.

No entanto, recebo os seguintes erros:

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

Eu procurei isso nas páginas de manual do ssh, mas não consegui entender a explicação sobre pseudo-termos e ttys.

Existe alguém que possa explicar os erros acima? Eu acho que é uma opção que falta, mas qual?

Ambas as plataformas são o Ubuntu 14.04 LTS.

twan163
fonte

Respostas:

62

Acredito que tenha algo a ver com o fato de apt-get autoremoveestar sendo executado em um shell não interativo. Consulte É possível responder a perguntas da caixa de diálogo ao instalar na janela de encaixe?

A solução parece prefixar o comando com DEBIAN_FRONTEND=noninteractive:

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
Alex
fonte
12
Isso acontece quando usando apt-get durante a janela de encaixe instalar, adicionando o prefixo, funciona muito bem
Neil McGill
Obrigado pelo comentário Neil. Eu senti como se tivesse me perdido, mas me deparei com o mesmo problema ao usar o apt-get durante a instalação do docker.
QCOM
13

A solução de Alex suprime erros, e ele quase acertou a causa, mas não permite que você responda a nenhuma pergunta (o que é bom quando você preseed as respostas e está sendo executado em um script, mas é realmente irritante quando você está tentando novos pacotes ) A questão central é uma interação entre as suposições feitas pelos vários frontends do ssh e do debconf.

Vamos começar com ssh. O ssh assume que, quando você não especifica um comando remoto, deseja um pty na extremidade remota e especifica um controle remoto (o que funciona notavelmente bem 90% do tempo, mas não este). Isso pode ser substituído pela -topção que força um pty ou pela -Topção que não o força (ou pelas opções correspondentes do arquivo de configuração). Além disso, ao usar um pty, a TERMvariável de ambiente é copiada (exceções podem ser aplicadas à documentação da verificação para obter detalhes completos e formulário oficial de inscrição em sorteios). Observe também que a -xopção desativa o encaminhamento X11 e o -Xhabilita.

O próprio Debconf não possui requisitos de interatividade (por design), mas os vários front-end possuem, e cada um tem requisitos diferentes.

Eu acredito que o frontend mais bonito é o gnome (também existe um front end do ked que eu não consegui trabalhar). O frontend do gnome (e o kde também) requer algumas bibliotecas não padrão e um servidor X11; portanto, a linha de comando para forçar o frontend do gnome (depois que as bibliotecas apropriadas estiverem instaladas) seria

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

ou se você prefere o kde

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

O frontend da caixa de diálogo (o padrão) requer um pty e um terminal com um nível mínimo de funcionalidade especificado na variável TERM (na prática, isso é qualquer coisa com uma descrição terminfo completa, exceto dumb).

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

ou

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

o frontline do readline possui requisitos menos rigorosos e funcionará com terminais burros, mas precisará de um pty.

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

O frontend do editor depende de um editor que tenha requisitos específicos, dependendo do editor.

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"

O front-end não interativo não possui requisitos, mas não faz nenhuma pergunta (que pode ou não ser o que você deseja).

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
hildred
fonte
"o front-end do readline possui requisitos menos rigorosos e funcionará com terminais burros, mas precisará de um arquivo." Você pode explicar como posso definir um pty?
Linuxatico 24/05
@linuxatico, ssh -tpara mais detalhes e outras opções, consulte a página de manual do ssh. Leia novamente o segundo parágrafo desta resposta.
hildred 24/05