Jak zapytać o hasło przy pomocy GUI podczas używania sudo w skrypcie?

14

Używam Trisquel GNU / Linux z GNOME Flashback Desktop Environment. Potrzebuję pytania o hasło GUI dla użytkownika do wykonania polecenia za pomocą sudoskryptu. Przykład rozważ następujący skrypt:

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

Który ma zostać wykonany w następujący sposób (Uruchom), tj. Nie w terminalu:

zrzut ekranu

Tak więc należy poprosić o hasło, aby uruchomić polecenie, w sudoprzeciwnym razie nie wykona zadania.

W związku z tym, jak zapytać o hasło przy pomocy GUI?

Pandya
źródło

Odpowiedzi:

19

Możesz poprosić o hasło za pomocą GUI z pomocą -A, --askpass.

Z strony podręcznika:

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

Tak więc, można graficznego programu pomocnika, takich jak ssh-askpass, które monituje użytkownika o przepustkę Zwrot wykorzystaniem GNOME:

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

Dodaj następujący wiersz do /etc/sudo.conf:

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

I zobaczysz monit o hasło GUI:

zrzut ekranu 1

Możesz także użyć do tego innego programu zenity. Przykład używam następujących:

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

Gdzie zenity_passphrasejest niestandardowy zestaw skryptów, który ma być używany bezpośrednio jako polecenie:

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

Który działa jak:

zrzut ekranu 2


Uwaga:

  • Możesz także użyć gksudo(GTK + frontend dla su i sudo) zamiast sudow skrypcie, który pyta w GUI:

    zrzut ekranu 3

  • Możesz także używać pkexec( aplikacja polkit ) z niektórymi (dla innych trzeba skonfigurować) aplikacjami / poleceniami:

    zrzut ekranu

Pandya
źródło
Na przykład podczas korzystania z pkexec pkexec leafpaddaje się Cannot open display:po wprowadzeniu hasła. Czy potrzebna jest jakaś dodatkowa konfiguracja?
GTRONICK,
SpróbujDISPLAY=:0 pkexec leafpad
Pandya,
Nadal nie działa, Cannot open display:pojawia się ten sam komunikat
GTRONICK