Come posso richiedere la password tramite il prompt della GUI mentre utilizzo sudo nello script?


14

Uso Trisquel GNU / Linux con l'ambiente desktop GNOME Flashback. Ho bisogno di una richiesta della password della GUI per l'utente per l'esecuzione del comando con sudonello script. L'esempio considera il seguente script:

zenity --question --text="Do you want to install this package?"
if [[ $? -eq 0 ]]; then sudo apt-get install package
else zenity --warning
fi

Che deve essere eseguito nel modo seguente (Run) cioè non all'interno del terminale:

immagine dello schermo

Quindi, è necessario richiedere la password per eseguire il comando, sudoaltrimenti non riesce a fare un lavoro.

Pertanto, come posso richiedere la password tramite il prompt della GUI?

Risposte:


19

Puoi chiedere la password tramite il prompt della GUI con l'aiuto di -A, --askpass.

Dalla manpage:

-A, --askpass
                 Normally, if sudo requires a password, it will read it from the user's terminal.  If the -A
                 (askpass) option is specified, a (possibly graphical) helper program is executed to read the user's
                 password and output the password to the standard output.  If the SUDO_ASKPASS environment variable
                 is set, it specifies the path to the helper program.  Otherwise, if sudo.conf(5) contains a line
                 specifying the askpass program, that value will be used.  For example:

                     # Path to askpass helper program
                     Path askpass /usr/X11R6/bin/ssh-askpass

                 If no askpass program is available, sudo will exit with an error.

Quindi, è possibile un programma di supporto grafico come quello ssh-askpassche richiede a un utente una passphrase usando GNOME:

$ which ssh-askpass
/usr/bin/ssh-askpass

Quindi, aggiungi la seguente riga a /etc/sudo.conf:

# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass

E troverai la richiesta della password della GUI:

screen-Shot1

Puoi anche usare altri programmi come zenityquello. Esempio che utilizzo come segue:

$ cat /etc/sudo.conf
# Path to askpass helper program
Path askpass /usr/local/bin/zenity_passphrase

Dove zenity_passphrasesi trova uno script personalizzato insieme per essere usato direttamente come comando:

$ cat $(which zenity_passphrase)
#!/bin/bash
zenity --password --title="sudo password prompt" --timeout=10

Che funziona come:

screen-Shot2


Nota:

  • Puoi anche usare gksudo(frontend GTK + per su e sudo) invece che sudonello script che richiede con il prompt della GUI:

    screen-Shot3

  • Puoi anche usare pkexec(l' applicazione polkit ) con alcune applicazioni / comandi (per altri deve essere configurato):

    immagine dello schermo


Quando si usa pkexec, ad esempio pkexec leafpad, dà Cannot open display:dopo aver inserito la password. È necessaria una configurazione adizionale?
GTRONICK,

ProvaDISPLAY=:0 pkexec leafpad
Pandya il

Ancora non funzionante, Cannot open display:appare lo stesso messaggio
GTRONICK,
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.