Frontend kann nicht initialisiert werden: Dialog bei Verwendung von ssh

52

Ich führe den folgenden Befehl über ssh in einer Testumgebung als root aus:

ssh <remote_srv> "apt-get autoremove"

In meiner sshd_config habe ich "PermitRootLogin without-password" und ich habe die id_rsa.pub von root zur authorized_keys-Datei auf dem Remote-Server hinzugefügt.

Trotzdem erhalte ich folgende Fehlermeldungen:

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

Ich habe dies in den Manpages von ssh nachgeschlagen, konnte mich aber nicht mit der Erklärung von Pseudobegriffen und ttys beschäftigen.

Gibt es jemanden, der die obigen Fehler erklären kann? Ich denke, es ist eine fehlende Option, aber welche?

Beide Plattformen sind Ubuntu 14.04 LTS.

twan163
quelle

Antworten:

62

Ich glaube, es hat etwas damit zu tun, dass apt-get autoremovees in einer nicht interaktiven Shell ausgeführt wird. Siehe Ist es möglich, Dialogfragen bei der Installation unter Docker zu beantworten?

Die Lösung scheint darin zu bestehen, dem Befehl Folgendes voranzustellen DEBIAN_FRONTEND=noninteractive:

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
Alex
quelle
12
Dies geschieht, wenn apt-get während der Docker-Installation verwendet wird und das Präfix hinzugefügt wird
Neil McGill,
Vielen Dank für den Kommentar Neil. Ich hatte das Gefühl, dass ich mich verfahren habe, aber ich bin auf dasselbe Problem gestoßen, als ich während der Docker-Installation apt-get verwendet habe.
Qcom
13

Die Lösung von Alex unterdrückt Fehler, und er hat fast die Ursache richtig verstanden, aber es erlaubt Ihnen nicht, Fragen zu beantworten (was in Ordnung ist, wenn Sie die Antworten vorher eingegeben haben und aus einem Skript ausgeführt werden, aber sehr ärgerlich, wenn Sie neue Pakete ausprobieren ). Das Kernproblem ist eine Wechselwirkung zwischen den Annahmen, die von den verschiedenen Frontends von ssh und debconf getroffen wurden.

Beginnen wir mit ssh. ssh geht davon aus, dass Sie, wenn Sie keinen Remote-Befehl angeben, eine Pty auf der Remote-Seite wünschen und dass Sie eine Remote angeben, die Sie nicht möchten (was in 90% der Fälle bemerkenswert gut funktioniert, nur nicht diese). Dies kann durch die -tOption, die ein Pty erzwingt, oder durch die -TOption, die kein Pty erzwingt, (oder durch die entsprechenden Optionen der Konfigurationsdatei) außer Kraft gesetzt werden . Außerdem wird bei Verwendung eines Pty die TERMUmgebungsvariable kopiert (Ausnahmen können in der Dokumentation für vollständige Details und das offizielle Gewinnspiel- Anmeldeformular enthalten sein ). Beachten Sie auch, dass die -xOption die X11-Weiterleitung deaktiviert und -Xaktiviert.

Debconf selbst hat keine Interaktivitätsanforderungen (von Entwurf), aber die verschiedenen Frontends haben unterschiedliche Anforderungen.

Ich glaube, das am besten aussehende Frontend ist Gnome (es gibt auch ein ked-Frontend, das ich nicht zum Arbeiten gebracht habe). Für das Gnome-Frontend (und auch für das KDE-Frontend) sind einige nicht standardmäßige Bibliotheken und ein X11-Server erforderlich. Daher müsste die Befehlszeile das Gnome-Frontend erzwingen (sobald die entsprechenden Bibliotheken installiert sind)

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

oder wenn du lieber kde

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

Das Dialog-Frontend (die Standardeinstellung) erfordert ein Pty und ein Terminal mit einem Mindestfunktionalitätsniveau, das in der TERM-Variablen angegeben ist (in der Praxis ist dies alles, was eine vollständige terminfo-Beschreibung außer dumm enthält).

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

oder

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

Das Readline-Frontend hat weniger strenge Anforderungen und funktioniert mit dummen Terminals, benötigt aber eine Pty.

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

Das Editor-Frontend hängt von einem Editor ab, an den je nach Editor spezielle Anforderungen gestellt werden.

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"

Das nicht interaktive Frontend hat keine Anforderungen, stellt jedoch keine Fragen (die möglicherweise nicht Ihren Wünschen entsprechen).

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
hildred
quelle
"Das Readline-Frontend hat weniger strenge Anforderungen und funktioniert mit dummen Terminals, benötigt aber ein Pty." Kannst du mir erklären, wie ich ein Pty setzen kann?
Linuxatico
Weitere ssh -tInformationen und andere Optionen finden Sie auf der SSH-Manpage. Lesen Sie auch den zweiten Absatz dieser Antwort noch einmal.
Hildred