Nie można zainicjować interfejsu użytkownika: okno dialogowe podczas korzystania z ssh


52

Wykonuję następujące polecenie przez ssh w środowisku testowym jako root:

ssh <remote_srv> "apt-get autoremove"

W moim sshd_config mam „PermitRootLogin bez hasła” i dodałem id_rsa.pub roota do pliku autoryzowanego_kluczy na zdalnym serwerze.

Mimo to dostaję następujące błędy:

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

Sprawdziłem to na stronach ssh de de man, ale nie mogłem skupić się na wyjaśnieniu pseudo-terminów i ttys.

Czy jest ktoś, kto może wyjaśnić powyższe błędy? Myślę, że to brakująca opcja, ale która?

Obie platformy to Ubuntu 14.04 LTS.

Odpowiedzi:


62

Wierzę, że ma to coś wspólnego z faktem, że apt-get autoremovejest uruchamiany w nieinteraktywnej powłoce. Zobacz Czy można odpowiedzieć na pytania dialogowe podczas instalacji w oknie dokowanym?

Wydaje się, że rozwiązaniem jest prefiks polecenia DEBIAN_FRONTEND=noninteractive:

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

12
Dzieje się tak, gdy używa się apt-get podczas instalacji dokera, dodanie prefiksu działa świetnie
Neil McGill

Dziękuję za komentarz Neil. Czułem się, jakbym zgubił drogę, ale napotkałem ten sam problem podczas korzystania z apt-get podczas instalacji dokera.
Qcom

13

Rozwiązanie Alexa eliminuje błędy i prawie ma właściwą przyczynę, ale nie pozwala ci odpowiedzieć na żadne pytania (co jest w porządku, gdy uprzedziłeś odpowiedzi i uruchamiasz się ze skryptu, ale naprawdę denerwujące, gdy próbujesz nowych pakietów ). Kluczowym zagadnieniem jest interakcja między założeniami poczynionymi przez ssh i różne nakładki debconf.

Zacznijmy od ssh. ssh zakłada, że ​​jeśli nie podasz komendy zdalnej, potrzebujesz pty na zdalnym końcu i że podasz komendę, której nie robisz (która działa zadziwiająco dobrze przez 90% czasu, tylko nie ta). Można to zastąpić -topcją, która wymusza pty lub -Topcją, która nie wymusza pty (lub odpowiednimi opcjami pliku konfiguracyjnego). Ponadto, przy użyciu pty, TERMzmienna środowiskowa jest kopiowana (wyjątki mogą mieć zastosowanie do sprawdzenia dokumentacji w celu uzupełnienia szczegółów i oficjalnego formularza wejścia do loterii). Warto również zauważyć, że -xopcja wyłącza przekazywanie X11 i -Xwłącza go.

Sam Debconf nie ma wymagań dotyczących interaktywności (zgodnie z projektem), ale różne interfejsy mają, a każdy ma inne wymagania.

Uważam, że najlepiej wyglądającym frontendem jest gnome (jest też fronted ked, którego nie uruchomiłem). Interfejs gnome (a także kde) wymaga pewnych domyślnych bibliotek i serwera X11, dlatego linia poleceń do wymuszenia frontonu gnome (po zainstalowaniu odpowiednich bibliotek) byłaby

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

lub jeśli wolisz kde

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

Frontend okna dialogowego (domyślny) wymaga pty i terminala o minimalnym poziomie funkcjonalności określonym w zmiennej TERM (w praktyce jest to wszystko z pełnym opisem terminfo oprócz głupiego).

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

lub

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

frontend readline ma mniej rygorystyczne wymagania i będzie działał z głupimi terminalami, ale będzie wymagał pty.

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

Nakładka edytora zależy od edytora, który miałby określone wymagania w zależności od edytora.

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"

Nieinteraktywny interfejs użytkownika nie ma żadnych wymagań, ale nie zadaje żadnych pytań (które mogą, ale nie muszą być tym, czego chcesz).

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

„Interfejs readline ma mniej rygorystyczne wymagania i będzie działał z głupimi terminalami, ale będzie wymagał pty”. Czy możesz wyjaśnić, jak mogę ustawić pty?
linuxatico

@linuxatico, ssh -tpo więcej szczegółów i inne opcje zajrzyj na stronę man ssh. Przeczytaj także drugi akapit tej odpowiedzi.
hildred
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.