Shell-Script
在腳本中使用 sudo 時如何通過 GUI 提示詢問密碼?
我將 Trisquel GNU/Linux 與 GNOME 閃回桌面環境一起使用。
sudo
我需要一個 GUI 密碼提示,以便使用者在腳本中執行命令。範例考慮以下腳本:zenity --question --text="Do you want to install this package?" if [[ $? -eq 0 ]]; then sudo apt-get install package else zenity --warning fi
將按照以下方式(執行)執行,即不在終端內:
因此,需要詢問密碼才能執行命令,
sudo
否則無法完成工作。因此,如何通過 GUI 提示詢問密碼?
您可以藉助**
-A, --askpass
**.sudo
從
sudo
手冊頁:-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.
因此,您可以使用圖形輔助程序,例如
ssh-askpass
使用GNOME提示使用者輸入密碼:$ which ssh-askpass /usr/bin/ssh-askpass
因此,將以下行添加到
/etc/sudo.conf
:# Path to askpass helper program Path askpass /usr/bin/ssh-askpass
你會發現 GUI 密碼提示:
您也可以使用其他類似
zenity
的程序。我使用以下範例:$ cat /etc/sudo.conf # Path to askpass helper program Path askpass /usr/local/bin/zenity_passphrase
直接用作命令
zenity_passphrase
的自定義腳本集在哪裡:$ cat $(which zenity_passphrase) #!/bin/bash zenity --password --title="sudo password prompt" --timeout=10
其工作原理如下:
筆記:
- 您也可以使用**
gksudo
**(用於 su 和 sudo 的 GTK+ 前端)而不是sudo
在使用 GUI 提示符詢問的腳本中(gksu
並且gksudo
在 2019-2020 年已過時並放棄):
- 您還可以將**
pkexec
**(polkit應用程序)與一些(對於其他需要配置的)應用程序/命令一起使用: