7

设置 SUDO_ASKPASS 环境变量是什么意思?你怎么做呢?我在哪里申报?

我正在尝试使用 shell 脚本在几分钟后关闭我的计算机并使用 java 启动此脚本。

4

2 回答 2

14

所以我不确定我会用$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.

于 2013-10-22T23:49:48.433 回答
0

特定于 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

于 2021-10-26T14:13:03.690 回答