![在脚本中使用 sudo 时,如何通过 GUI 提示询问密码?](https://linux22.com/image/80928/%E5%9C%A8%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%BD%BF%E7%94%A8%20sudo%20%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20GUI%20%E6%8F%90%E7%A4%BA%E8%AF%A2%E9%97%AE%E5%AF%86%E7%A0%81%EF%BC%9F.png)
我使用 Trisquel GNU/Linux 和 GNOME Flashback 桌面环境。我需要一个 GUI 密码提示,以便用户sudo
在脚本中执行命令。示例考虑以下脚本:
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 提示询问密码?
答案1
您可以在 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
(波尔基特应用程序)和一些(对于其他应用程序需要配置)应用程序/命令: