it-swarm.com.de

Frontend kann nicht initialisiert werden: Dialog bei Verwendung von ssh

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 bekomme 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 Pseudo-Begriffen 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.

50
twan163

Ich glaube, es hat etwas mit der Tatsache zu tun, dass apt-get autoremove 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 DEBIAN_FRONTEND=noninteractive voranzustellen:

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
61
Alex

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 Option -t überschrieben werden, die ein Pty erzwingt, oder durch die Option -T, die kein Pty erzwingt (oder durch die entsprechenden Optionen der Konfigurationsdatei). Außerdem wird bei Verwendung eines Pty die Umgebungsvariable TERM kopiert (Ausnahmen können in der Dokumentation für ausgefüllte Details und das offizielle Gewinnspiel-Anmeldeformular enthalten sein). Beachten Sie auch, dass die Option -x die X11-Weiterleitung deaktiviert und -X sie aktiviert.

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 Laufen 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"

Für das Dialog-Frontend (Standardeinstellung) sind ein Pty und ein Terminal mit einem in der TERM-Variablen angegebenen Mindestfunktionalitätsniveau erforderlich (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"
13
hildred