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.
Je pense que cela a quelque chose à voir avec le fait que apt-get autoremove
est 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"
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 ennuyeux 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 annulé par l'option -t
qui force un pty ou par l'option -T
qui ne force aucun pty (ou les options du fichier de configuration correspondantes). En outre, lors de l’utilisation d’un pty, la variable d’environnement TERM
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'option -x
désactive le transfert X11 et que -X
l'active.
Debconf elle-même n’a pas d’exigences d’interactivité (de par leur conception), mais les différentes interfaces le font, et chacune d’elles a des exigences différentes.
Je crois que la meilleure interface est gnome (il y a aussi une extrémité ked que je n'ai pas pu travailler). 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 (en pratique, il s’agit de tout ce qui comporte une description complète de terminfo sauf la valeur idiote).
ssh -t <remote_srv> "TERM=$TERM DEBIAN_FRONTEND=dialog apt-get autoremove"
ou
ssh -t <remote_srv> "apt-get autoremove"
le front 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 être ou ne pas être ce que vous voulez).
ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"