假设,我有以下 bash 脚本:
#!/bin/bash
sudo command1
command2
sudo command3
我不想以command2
root 身份运行,所以我不会使用sudo
. 因此,一旦我执行脚本,就会sudo command1
询问我的密码。不幸的是,command2
大约需要2个小时才能完成。所以 sudo 凭据时间戳超时,当脚本到达时sudo command3
,我再次提示输入密码。
我不想完全永久禁用 sudo 凭据时间戳超时,例如https://superuser.com/a/149740中所述。我只想暂时禁用超时,有效地保留这个 bash 会话的凭据,直到它结束。
我认为您最好的选择是刷新 sudo 时间戳的(后台)忙等待循环,然后在您不再需要
sudo
特权时将其杀死。这是一个示例脚本;它运行sleep 6
而不是你的两个小时command2
,并运行可见/bin/echo
命令而不是command1
andcommand2
:对于您的实际脚本,我建议使用更宽松的循环:
sleep 59
根据timestamp_timeout
sudoers 中的现有设置调整口味;我选择 59 只是为了演示如果时间戳超时为 60 秒您可以做出的选择。我必须在这里遗漏一些东西,因为解决方案对我来说似乎很明显。
但是,如果您更改脚本,则
sudo
无需以 root 身份运行即可运行整个脚本:command 2
好吧,可以结合如何让 sudo 在一个命令后自动忘记密码?以及明确使用`sudo -S`的目的是什么?
sudo
使用标志运行-k
以忽略凭据,因此它将始终提示输入密码stdin
intosudo
with flag-S
它在某些情况下可能有用,但我不确定将用户密码存储在环境变量中是否是个好主意。
通过在后台刷新凭据: