是否可以在当前 shell 中禁用 sudo 超时?

Hub*_*bro 5 linux sudo

某些应用程序(例如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 会话?

Hub*_*bro 7

这是一种可能的解决方法。写一个像这样的脚本(例如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 的有效性,直到它关闭为止。


mox*_*mox 7

一般来说,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)

  • 呵呵,这基本上使我的脚本过时了。我想知道这是否是一个新的命令行选项,因为我以前从未见过它:/ (2认同)

hol*_*ill 5

对于当前的 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: 每次都得到提示