![从用户 GUI 以 root 身份运行脚本](https://linux22.com/image/706599/%E4%BB%8E%E7%94%A8%E6%88%B7%20GUI%20%E4%BB%A5%20root%20%E8%BA%AB%E4%BB%BD%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC.png)
所以,我有一个需要安装软件的脚本,但该脚本需要以 root 身份运行。
我在 GUI 上创建了一个桌面图标(使用 Ubuntu 桌面),理想情况下,用户单击此图标,它将提示输入密码,然后以 root 身份运行脚本。
到目前为止,如果以 root 身份运行,该脚本可以执行预期的操作,但以用户身份运行则不行。脚本如下所示:
#!/bin/bash -l
zenity --question --text "This script will reboot after installation is complete" --title="Warning\!" 2> /dev/null
if [ $? = 0 ]; then
install dependencies
dpkg -i package.deb
etc
fi
reboot
但是,如果我单击图标来运行脚本,它会加载但不会执行任何操作,然后我检查日志并意识到它失败了:sudo: no tty present and no askpass program specified
我知道我可以修改 sudoers 文件,但我不想这样做因为我需要保持这个用户独立。
有没有办法在运行脚本时强制要求用户成为 root?或者强制 GUI 要求输入密码?完成此操作的最佳方法是什么?我需要用户运行此程序,但我需要以 root 身份运行该程序,而 sudo 出于某种原因没有这样做。
答案1
您收到的错误消息告诉您需要做什么:
sudo: no tty present and no askpass program specified
您需要配置一个 askpass 程序才能使其工作。如果您尚未安装,则首先需要安装一个。它看起来应该ssh-askpass
可以工作。
sudo apt-get install ssh-askpass
接下来您需要配置sudo
才能使用它。这可以通过sudo.conf
环境变量来完成。由于您正在编写脚本,我猜您想使用环境变量。我测试了这个命令:
SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass sudo -A ls
第一部分设置环境变量。该-A
参数强制sudo
始终使用 GUI 询问密码,即使它在终端中运行。