Bagaimana cara saya meminta kata sandi oleh GUI prompt saat menggunakan sudo dalam skrip?

14

Saya menggunakan Trisquel GNU / Linux dengan GNOME Flashback Desktop Environment. Saya memerlukan prompt kata sandi GUI untuk pengguna untuk menjalankan perintah dengan sudoskrip. Contoh pertimbangkan skrip berikut:

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

Yang akan dieksekusi dengan cara berikut (Jalankan) yaitu tidak di dalam terminal:

tangkapan layar

Jadi, perlu untuk meminta kata sandi untuk menjalankan perintah dengan sudojika tidak gagal melakukan pekerjaan.

Karena itu, Bagaimana cara saya meminta kata sandi oleh GUI prompt?

Pandya
sumber

Jawaban:

19

Anda dapat meminta kata sandi melalui GUI prompt dengan bantuan -A, --askpass.

Dari halaman manual:

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

Jadi, Anda dapat program bantuan grafis seperti ssh-askpassyang meminta pengguna untuk frasa sandi menggunakan GNOME:

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

Jadi, Tambahkan baris berikut ke /etc/sudo.conf:

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

Dan Anda akan menemukan prompt kata sandi GUI:

layar-shot1

Anda juga dapat menggunakan program lain seperti zenityitu. Contoh yang saya gunakan berikut ini:

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

Di mana zenity_passphraseskrip khusus disetel untuk digunakan langsung sebagai perintah:

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

Yang berfungsi seperti:

layar-shot2


catatan:

  • Anda juga dapat menggunakan gksudo(GTK + frontend untuk su dan sudo) alih-alih sudodalam skrip yang menanyakan dengan prompt GUI:

    layar-shot3

  • Anda juga dapat menggunakan pkexec( aplikasi polkit ) dengan beberapa (untuk yang lain perlu dikonfigurasi) aplikasi / perintah:

    tangkapan layar

Pandya
sumber
Saat menggunakan pkexec, misalnya pkexec leafpad, itu memberi Cannot open display:setelah memasukkan kata sandi. Apakah ada konfigurasi tambahan yang diperlukan?
GTRONICK
CobaDISPLAY=:0 pkexec leafpad
Pandya
Masih tidak berfungsi, pesan yang sama Cannot open display:muncul
GTRONICK