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?

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.