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

44

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

ssh <remote_srv> "apt-get autoremove"

No meu sshd_config eu tenho "PermitRootLogin sem senha" e adicionei o id_rsa.pub da raiz ao arquivo authorized_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 em algumas páginas do ssh, mas não consegui me concentrar na 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.

    
por twan163 03.08.2014 / 09:16

2 respostas

53

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

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

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
    
por Alex 04.08.2014 / 12:40
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ê pré-configurou as respostas e está executando um script, mas é realmente irritante quando você está tentando novos pacotes). A questão central é uma interação entre as suposições feitas pelos diversos front ends do ssh e do debconf.

Vamos começar com ssh. O ssh assume que, quando você não especifica um comando remoto, você quer um pty no ponto remoto e que você não especifica um controle remoto (que funciona notavelmente bem 90% do tempo, mas não este). Isso pode ser substituído pela opção -t , que força um pty ou a opção -T que não força nenhum pty (ou as opções de arquivo de configuração correspondentes). Além disso, ao usar uma pty, a variável de ambiente TERM é copiada (exceções podem ser aplicadas à documentação de verificação para detalhes completos e formulário de entrada de sorteio oficial). Além disso, observe que a opção -x desabilita o encaminhamento do X11 e o -X permite isso.

O próprio Debconf não possui requisitos de interatividade (por design), mas os diversos frontends fazem, e cada um tem requisitos diferentes.

Eu acredito que o frontend mais bonito é o gnome (há também um front-end ked que eu não consegui trabalhar). O frontend do gnome (e o do 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 (uma vez que as bibliotecas apropriadas estiverem instaladas) seria

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

ou se você preferir o kde

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

O frontend do 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 completa do terminfo, exceto burra).

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

ou

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

o frontend 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"

A interface do editor depende de um editor que teria 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 tem requisitos, mas não faz perguntas (que podem ou não ser o que você quer).

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
    
por hildred 03.11.2015 / 00:33

Tags