Impossibile inizializzare frontend: dialog quando si usa ssh


52

Sto eseguendo il seguente comando su ssh in un ambiente di test, come root:

ssh <remote_srv> "apt-get autoremove"

Nel mio sshd_config ho "PermitRootLogin senza password" e ho aggiunto id_rsa.pub di root al file authorized_keys sul server remoto.

Tuttavia ricevo i seguenti errori:

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

Ho cercato questo in pagine man di ssh, ma non sono riuscito a concludere la spiegazione su pseudo-termini e tty.

C'è qualcuno che può spiegare gli errori sopra? Immagino sia un'opzione mancante, ma quale?

Entrambe le piattaforme sono Ubuntu 14.04 LTS.

Risposte:


62

Credo che abbia qualcosa a che fare con il fatto che apt-get autoremoveviene eseguito in una shell non interattiva. Vedi È possibile rispondere alle domande della finestra di dialogo quando si installa sotto la finestra mobile?

La soluzione sembra essere il prefisso del comando con DEBIAN_FRONTEND=noninteractive:

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

12
Questo accade quando si utilizza apt-get durante l'installazione della finestra mobile, aggiungendo il prefisso, funziona alla grande
Neil McGill

Grazie per il commento Neil. Mi sembrava di essermi perso la strada, ma ho riscontrato lo stesso problema durante l'utilizzo di apt-get durante l'installazione della finestra mobile.
Qcom,

13

La soluzione di Alex elimina gli errori e ha quasi capito bene la causa, ma non ti consente di rispondere a qualsiasi domanda (il che va bene quando hai preconfigurato le risposte e stai eseguendo uno script, ma è davvero fastidioso quando stai provando nuovi pacchetti ). Il problema principale è un'interazione tra le ipotesi fatte dai vari frontend di ssh e debconf.

Cominciamo con ssh. ssh presuppone che quando non si specifica un comando remoto si desidera un pty sull'estremità remota e si specifica un telecomando che non si fa (che funziona notevolmente bene il 90% delle volte, ma non questo). Questo può essere ignorato -tdall'opzione che forza un pty o -Tdall'opzione che non forza pty (o dalle corrispondenti opzioni del file di configurazione). Inoltre, quando si utilizza un pty, la TERMvariabile di ambiente viene copiata (possono essere applicate eccezioni alla documentazione di controllo per i dettagli completi e il modulo di iscrizione al concorso ufficiale). Inoltre, l' -xopzione disabilita l'inoltro X11 e lo -Xabilita.

Debconf stesso non ha requisiti di interattività (in base alla progettazione), ma i vari frontend lo fanno e ognuno ha requisiti diversi.

Credo che il frontend più bello sia lo gnomo (c'è anche un front end ked che non ho funzionato). Il frontend gnome (e anche quello kde) richiede alcune librerie non predefinite e un server X11, quindi la riga di comando per forzare il frontend gnome (una volta installate le librerie appropriate) sarebbe

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

o se preferisci kde

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

Il frontend della finestra di dialogo (impostazione predefinita) richiede un pty e un terminale con un livello minimo di funzionalità specificato nella variabile TERM (in pratica si tratta di qualcosa con una descrizione terminfo completa tranne che stupido).

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

o

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

il frontend readline ha requisiti meno stringenti e funzionerà con terminali stupidi, ma avrà bisogno di un pty.

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

Il frontend dell'editor dipende da un editor che avrebbe requisiti specifici a seconda dell'editor.

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"

Il frontend non interattivo non ha requisiti ma non pone domande (che possono essere o meno ciò che si desidera).

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

"il frontend readline ha requisiti meno rigorosi e funzionerà con terminali stupidi, ma avrà bisogno di un pty." Puoi spiegare come posso impostare un pty?
linuxatico

@linuxatico, ssh -tper maggiori dettagli e altre opzioni guarda la pagina man di ssh. Rileggi anche il secondo paragrafo di questa risposta.
hildred
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.