Wie frage ich nach dem Passwort per GUI-Eingabeaufforderung, während ich sudo im Skript verwende?

13

Ich verwende Trisquel GNU / Linux mit GNOME Flashback Desktop Environment. Ich benötige eine GUI-Kennwortabfrage für den Benutzer, um den Befehl mit sudoim Skript auszuführen . Beispiel: Betrachten Sie das folgende Skript:

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

Was auf folgende Weise ausgeführt werden soll (Ausführen), dh nicht innerhalb des Terminals:

Bildschirmfoto

Es ist also erforderlich, nach einem Kennwort zu fragen, um den Befehl auszuführen, da sudosonst kein Job ausgeführt werden kann.

Wie frage ich daher nach dem Passwort per GUI-Eingabeaufforderung?

Pandya
quelle

Antworten:

18

Sie können das Passwort über die GUI-Eingabeaufforderung mit Hilfe von abfragen -A, --askpass.

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

Sie können also ein grafisches Hilfsprogramm erstellen, z. B. ssh-askpassdas einen Benutzer mit GNOME zur Eingabe einer Passphrase auffordert :

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

Fügen Sie also die folgende Zeile hinzu /etc/sudo.conf:

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

Und Sie finden eine Eingabeaufforderung für das GUI-Passwort:

Screenshot1

Sie können auch ein anderes Programm wie zenitydieses verwenden. Beispiel verwende ich folgendes:

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

Wo zenity_passphraseist ein benutzerdefiniertes Skript festgelegt , das direkt als Befehl verwendet werden soll:

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

Welches funktioniert wie:

Screenshot2


Hinweis:

  • Sie können auch gksudo(GTK + Frontend für su und sudo) anstelle des sudoSkripts verwenden, das mit der GUI-Eingabeaufforderung fragt:

    Screenshot3

  • Sie können pkexec( polkit application) auch mit einigen (für andere muss es konfiguriert werden) Anwendungen / Befehlen verwenden:

    Bildschirmfoto

Pandya
quelle
Wenn Sie beispielsweise pkexec verwenden, pkexec leafpadwird es Cannot open display:nach Eingabe des Kennworts angezeigt . Ist eine zusätzliche Konfiguration erforderlich?
GTRONICK
Versuchen SieDISPLAY=:0 pkexec leafpad
Pandya
Die gleiche Botschaft immer noch nicht funktioniert, Cannot open display:erscheint
GTRONICK