某些应用程序(例如yay)使用 sudo 以 root 身份运行某些命令。这意味着我必须坐在终端前等待 sudo 提示我输入密码,然后手动输入密码才能继续。我可以通过首先以 sudo 身份运行命令来避免这种情况(如sudo -v)。这样你就可以以 sudo 身份运行命令而不会提示我输入密码。
但有时,应用程序需要很长时间才能安装,以至于 sudo 会话超时(15 分钟)并且 sudo 重新提示我输入密码。由于我通常会在发生这种情况时离开计算机或切换到其他工作区,因此 sudo 密码提示通常会超时,这非常烦人。
我不想完全禁用 sudo 超时,因为它存在是有原因的。但是,当我预计使用 sudo 的命令需要很长时间时,我希望能够仅对当前 shell 禁用 sudo 超时。
就像是:
sudo --disable-timeout
Run Code Online (Sandbox Code Playgroud)
现在我应该能够在当前的 shell 中运行 sudo,而不必重新输入我的密码,或者直到我运行sudo -k.
这样的事情是可能的,还是我必须编写一个包装脚本来定期为我刷新 sudo 会话?
这是一种可能的解决方法。写一个像这样的脚本(例如sudo-stay-validated.sh):
#!/bin/bash
while true; do
sudo -v
sleep 60
done
Run Code Online (Sandbox Code Playgroud)
在终端中运行脚本,其中 sudo 应保持验证:
$ bash sudo-stay-validated.sh
Run Code Online (Sandbox Code Playgroud)
按 Ctrl+Z 将其置于后台,然后记住运行$ bg以在后台恢复脚本。
这会在当前 shell 中保持 sudo 的有效性,直到它关闭为止。
一般来说,sudo 超时是出于(安全)原因。当您(成功)尝试规避该超时时,就会削弱系统的安全性。因此,让我们再看一下上述问题:您运行了一项冗长的工作,一段时间后 sudo 要求输入密码并超时。您建议阻止 sudo 询问密码。或者,防止 sudo 超时。放:
Defaults passwd_timeout=0
Run Code Online (Sandbox Code Playgroud)
进入您的sudoers文件,让 sudo 等待您输入密码。这将防止超时问题,但会停止构建,直到您输入密码。从好的方面来说,您可以避免损害安全性。
或者,由于您具体提到了 yay,所以 yay 有一个命令行选项,可以使其在后台调用 sudo 以防止超时。从man sway:
--sudoloop
Loop sudo calls in the background to prevent sudo from timing out during long builds.
Run Code Online (Sandbox Code Playgroud)
对于当前的 shell,似乎没有简单的方法可以做到这一点,但您可以全局设置超时。
为了设置与默认值(= 15 分钟)不同的超时(全局),您可以编辑/etc/sudoers:
sudo visudo # opens /etc/sudoers for editing
# change the following line:
# Defaults env_reset
# to:
Defaults env_reset,timestamp_timeout=30 # timeout in minutes
Run Code Online (Sandbox Code Playgroud)
或者:
cd /etc/sudoers.d
sudo visudo -f username
Defaults env_reset,timestamp_timeout=30 # timeout in minutes
Run Code Online (Sandbox Code Playgroud)
特殊值:
-1: 没有超时0: 每次都得到提示