No se puede inicializar frontend: diálogo cuando se usa ssh

52

Estoy ejecutando el siguiente comando sobre ssh en un entorno de prueba, como root:

ssh <remote_srv> "apt-get autoremove"

En mi sshd_config tengo "PermitRootLogin sin contraseña" y he agregado el id_rsa.pub de root al archivo autorizado_keys en el servidor remoto.

Sin embargo, recibo los siguientes errores:

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

He buscado esto en las páginas de manual de ssh, pero no pude entender la explicación sobre pseudo-términos y ttys.

¿Hay alguien que pueda explicar los errores anteriores? Supongo que es una opción que falta, pero ¿cuál?

Ambas plataformas son Ubuntu 14.04 LTS.

twan163
fuente

Respuestas:

62

Creo que tiene algo que ver con el hecho de que apt-get autoremovese ejecuta en un shell no interactivo. Consulte ¿Es posible responder preguntas de diálogo al instalar en Docker?

La solución parece ser prefijar el comando con DEBIAN_FRONTEND=noninteractive:

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
Alex
fuente
12
Esto sucede cuando se usa apt-get durante la instalación de Docker, agregar el prefijo, funciona muy bien
Neil McGill
Gracias por el comentario Neil. Sentí que había perdido el rumbo, pero me encontré con el mismo problema al usar apt-get durante la instalación de Docker.
Qcom
13

La solución de Alex suprime los errores, y casi tiene la causa correcta, pero no le permite responder a ninguna pregunta (lo cual está bien cuando ha preseleccionado las respuestas y se está ejecutando desde un script, pero es realmente molesto cuando intenta nuevos paquetes ) El tema central es una interacción entre las suposiciones hechas por ssh y las diversas interfaces de debconf.

Comencemos con ssh. ssh asume que cuando no especifica un comando remoto, desea una pty en el extremo remoto y que especifica un control remoto que no (que funciona notablemente bien el 90% del tiempo, pero no este). Esto puede ser anulado por la -topción que fuerza una pty o la -Topción que no fuerza pty (o las opciones de archivo de configuración correspondientes). Además, cuando se usa una pty TERM, se copia la variable de entorno (se pueden aplicar excepciones para verificar la documentación de los detalles completos y el formulario de inscripción oficial del sorteo). También cabe destacar que la -xopción deshabilita el reenvío X11 y lo -Xhabilita.

Debconf en sí no tiene requisitos de interactividad (por diseño), pero las diversas interfaces sí, y cada una tiene requisitos diferentes.

Creo que el frontend más atractivo es gnome (también hay un front-end ked que no puse a trabajar). La interfaz gnome (y la kde también) requiere algunas bibliotecas no predeterminadas y un servidor X11, por lo tanto, la línea de comando para forzar la interfaz gnome (una vez que se instalen las bibliotecas apropiadas)

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

o si prefieres kde

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

La interfaz de diálogo (el valor predeterminado) requiere una pty y un terminal con un nivel mínimo de funcionalidad especificado en la variable TERM (en la práctica, esto es cualquier cosa con una descripción completa de terminfo excepto tonto).

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

o

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

la interfaz de línea de lectura tiene requisitos menos estrictos y funcionará con terminales tontos, pero necesitará un pie.

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

La interfaz del editor depende de un editor que tenga requisitos específicos según el 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"

La interfaz no interactiva no tiene requisitos, pero no hace ninguna pregunta (que puede o no ser lo que desea).

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
hildred
fuente
"La interfaz de línea de lectura tiene requisitos menos estrictos y funcionará con terminales tontas, pero necesitará un pie". ¿Puedes explicar cómo puedo configurar una pty?
linuxatico
@linuxatico, ssh -tpara más detalles y otras opciones mira la página de manual de ssh. Vuelva a leer también el segundo párrafo de esta respuesta.
hildred