Impossible d'initialiser l'interface: dialogue lors de l'utilisation de ssh

52

J'exécute la commande suivante sur ssh dans un environnement de test, en tant que root:

ssh <remote_srv> "apt-get autoremove"

Dans mon sshd_config, j'ai "PermitRootLogin sans mot de passe" et j'ai ajouté le id_rsa.pub de root au fichier allowed_keys sur le serveur distant.

Néanmoins, j'obtiens les erreurs suivantes:

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

J'ai regardé cela dans les pages de man de ssh, mais je ne pouvais pas comprendre les explications sur des pseudo-termes et des ttys.

Y a-t-il quelqu'un qui peut expliquer les erreurs ci-dessus? Je suppose que c'est une option manquante, mais laquelle?

Les deux plates-formes sont Ubuntu 14.04 LTS.

twan163
la source

Réponses:

62

Je crois que cela a quelque chose à voir avec le fait qu'il apt-get autoremoveest exécuté dans un shell non interactif. Voir Est-il possible de répondre aux questions du dialogue lors de l'installation sous docker?

La solution semble être de préfixer la commande avec DEBIAN_FRONTEND=noninteractive:

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
Alex
la source
12
Cela se produit lorsque vous utilisez apt-get lors de l'installation de docker, en ajoutant le préfixe, fonctionne très bien
Neil McGill
Merci pour le commentaire Neil. J'avais l'impression de m'être égaré, mais je rencontrais le même problème lorsque j'utilisais apt-get lors de l'installation de docker.
Qcom
13

La solution d'Alex supprime les erreurs, et il a presque résolu le problème, mais il ne vous permet pas de répondre aux questions (ce qui est bien lorsque vous avez préconfiguré les réponses et que vous exécutez un script, mais vraiment ennuyant lorsque vous essayez de nouveaux packages. ). Le problème principal est une interaction entre les hypothèses émises par ssh et les différentes interfaces de debconf.

Commençons par ssh. ssh suppose que lorsque vous ne spécifiez pas de commande à distance, vous voulez un pty et que vous ne spécifiez pas de télécommande (ce qui fonctionne remarquablement bien dans 90% des cas, mais pas celui-ci). Cela peut être remplacé par l' -toption qui force un pty ou l' -Toption qui ne force pas pty (ou les options de fichier de configuration correspondantes). En outre, lors de l’utilisation d’un pty, la TERMvariable d’environnement est copiée (des exceptions peuvent s’appliquer à la documentation de contrôle pour plus de détails et au formulaire officiel de participation au concours). Il convient également de noter que l’ -xoption désactive le transfert X11 et l’ -Xactive.

Debconf lui-même n'a pas d'exigences d'interactivité (de par leur conception), mais les différentes interfaces le font et chacune a des exigences différentes.

Je crois que la meilleure interface est gnome (il y a aussi une interface que je n'ai pas réussi à faire fonctionner). L’interface GNOME (et celle de kde également) nécessite des bibliothèques autres que celles par défaut et un serveur X11; par conséquent, la ligne de commande permettant de forcer l’intérieur du GNOME (une fois les bibliothèques appropriées installées) serait:

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

ou si vous préférez kde

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

La boîte de dialogue (la valeur par défaut) nécessite un terminal utilisateur et un terminal avec un niveau minimum de fonctionnalités spécifiées dans la variable TERM (il s’agit en pratique de tout élément comportant une description terminfo complète, à l'exception de dumb).

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

ou

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

l'interface de lecture a des exigences moins strictes et fonctionnera avec des terminaux stupides, mais aura besoin d'un pty.

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

L'interface de l'éditeur dépend d'un éditeur qui aurait des exigences spécifiques selon l'éditeur.

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"

L’interface non interactive n’a pas d’exigences, mais elle ne pose aucune question (qui peut ne pas être ce que vous voulez).

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
Hildred
la source
"L’interface readline a des exigences moins strictes et fonctionnera avec des terminaux stupides, mais aura besoin d’un pty." Pouvez-vous expliquer comment puis-je définir un pty?
linuxatico
@linuxatico, ssh -tpour plus de détails et d'autres options, consultez la page de manuel ssh. Relisez également le deuxième paragraphe de cette réponse.
Hildred