如何将需要 sudo 的工作置于后台?

如何将需要 sudo 的工作置于后台?

我正在寻找一种将需要 sudo 的工作置于后台的方法,除了输入密码之外,尽可能少地进行交互。

sudo 需要来自终端的密码,而后台作业将放弃终端:

$ sudo sleep 10 &
[1] 32749
$ fg 1
sudo sleep 10
[sudo] password for t: 

我当前的解决方案就像上面输入我的密码,然后bg 1再次进行工作。它需要我交互地执行三个命令

sudo 仅适用于可执行文件,不适用于 shell 特定命令:

$ sudo ( sleep 10 & )
bash: syntax error near unexpected token `sleep'
$ sudo { sleep 10 & }
bash: syntax error near unexpected token `}'

以下方法会将后台作业与外壳分离,这是不希望的:

$ sudo bash -c "sleep 10 & "
[sudo] password for t: 
$ jobs
$ 

我也可以集中精力sudo。例如,在 sudoers 中创建命令 NOPASSWD,或者通过在实际后台 sudo 命令之前运行虚拟 sudo 命令来利用密码缓存。我不确定它们是否是优雅的方式。让我知道其中是否有。

答案1

我用sudo -v它来作为你的“在实际后台 sudo 命令之前的虚拟 sudo 命令”;这须藤手册页给出这个:

通过使用 -v 选项运行 sudo,用户可以更新缓存的凭据,而无需运行命令。

这并不要求用户拥有任何其他 sudo 授予的命令来充当“虚拟”sudo 命令。

答案2

我认为你的最后一段是解决这个问题的方法。如果禁用密码要求是适当的,那么请务必使用 来配置该命令NOPASSWD。否则,如果您sudo允许缓存凭据(默认情况下会这样做),您可以提前进行设置:

sudo -v
sudo sleep 10 &

相关内容