Comment demander le mot de passe par une invite GUI lors de l'utilisation de sudo dans le script?

13

J'utilise Trisquel GNU / Linux avec l'environnement de bureau GNOME Flashback. J'ai besoin d'une invite de mot de passe GUI pour l'utilisateur pour exécuter la commande avec sudodans le script. Exemple, considérez le script suivant:

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

Qui doit être exécuté de la manière suivante (Run) c'est-à-dire pas à l'intérieur du terminal:

capture d'écran

Donc, il est nécessaire de demander un mot de passe pour exécuter la commande, sudosinon il ne fera pas de travail.

Par conséquent, comment demander le mot de passe par invite graphique?

Pandya
la source

Réponses:

18

Vous pouvez demander le mot de passe au moyen de l'invite GUI à l'aide de -A, --askpass.

Depuis la page de manuel:

-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.

Ainsi, vous pouvez utiliser un programme d'aide graphique tel que celui ssh-askpassqui invite un utilisateur à saisir une phrase de passe à l' aide de GNOME:

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

Alors, ajoutez la ligne suivante à /etc/sudo.conf:

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

Et vous trouverez une invite de mot de passe GUI:

capture d'écran1

Vous pouvez également utiliser un autre programme comme zenitycelui-là. Exemple que j'utilise suivant:

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

Où se zenity_passphrasetrouve un jeu de scripts personnalisé à utiliser directement comme commande:

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

Qui fonctionne comme:

capture d'écran2


Remarque:

  • Vous pouvez également utiliser gksudo(GTK + frontend pour su et sudo) au lieu de sudodans le script qui demande avec l'invite GUI:

    capture d'écran3

  • Vous pouvez également utiliser pkexec( application polkit ) avec certaines (pour d'autres, il doit être configuré) applications / commandes:

    capture d'écran

Pandya
la source
Lors de l'utilisation de pkexec, par exemple pkexec leafpad, il donne Cannot open display:après avoir entré le mot de passe. Une configuration supplémentaire est-elle nécessaire?
GTRONICK
EssayezDISPLAY=:0 pkexec leafpad
Pandya
Ne fonctionne toujours pas, le même message Cannot open display:apparaît
GTRONICK