设置 SUDO_ASKPASS 环境变量是什么意思?你怎么做呢?我在哪里申报?
我正在尝试使用 shell 脚本在几分钟后关闭我的计算机并使用 java 启动此脚本。
所以我不确定我会用$SUDO_ASKPASS
这个。基本上, 的值$SUDO_ASKPASS
是一个可执行文件,它会在调用时将您的密码吐出标准输出。所以,如果你的密码是 'foo',你可以写一个 shell 脚本:
#!/bin/bash
echo 'foo'
并将其放入~/bin/pw.sh
. 然后,您将设置环境变量并按如下方式执行命令:
SUDO_ASKPASS=${HOME}/bin/pw.sh sudo shutdown -h now
该示例假设您在达尔文;shutdown
在不同的操作系统上表现不同。
一种更智能(也更安全)的方法是NOPASSWD
使用/etc/sudoers
. 我们将添加这样的一行:
jane ALL=NOPASSWD: /sbin/shutdown
这再次假设您使用的是 Mac。你的名字是简。改变那个。这样 sudo 在您发出命令时不会要求输入密码/sbin/shutdown
。(正确)编辑 sudoers的命令是visudo
.
特定于 Mac 的答案:
如果您不希望在某个文件中使用明文密码,您还可以调用 GUI 提示来手动输入密码,无论何时sudo -A ...
调用类似的东西。为此,请创建一个包含以下内容的二进制文件(取自此答案):
#!/bin/bash
pw="$(osascript -e 'Tell application "System Events" to display dialog "Password:" default answer "" with hidden answer' -e 'text returned of result' 2>/dev/null)" && echo "$pw"
例如,您可以将其放在一个名为~/bin/pw.sh
. 然后通过执行使其可执行chmod +x ~/bin/pw.sh
。
最后设置环境变量指向这个文件。因此将以下内容放入~/.bashrc
(或者~/.zshrc
如果您使用 Z shell):
SUDO_ASKPASS=${HOME}/bin/pw.sh
最后通过执行source ~/.bashrc
(或source ~/.zshrc
)然后测试一切sudo -A ls
。