从用户 GUI 以 root 身份运行脚本

从用户 GUI 以 root 身份运行脚本

所以,我有一个需要安装软件的脚本,但该脚本需要以 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 询问密码,即使它在终端中运行。

相关内容