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

  • 本文关键字:sudo 超时 shell 是否 linux sudo
  • 更新时间 :
  • 英文 :


某些应用程序(例如yay(使用sudo作为root用户运行一些命令。这意味着我必须坐在终端前,等待sudo提示我输入密码,然后手动输入密码以使yay继续。我可以通过首先以sudo的身份运行一个命令(如sudo -v(来避免这种情况。这样yay就可以像sudo一样运行命令,而不会提示我输入密码。

但有时,安装应用程序需要很长时间,以至于sudo会话超时(15分钟(,sudo会重新提示我输入密码。由于在这种情况下,我通常会离开电脑或切换到不同的工作区,因此sudo密码提示通常会超时,这非常烦人。

我不想完全禁用sudo超时,因为它存在是有原因的。然而,当我预计使用sudo的命令将花费长的时间时,我希望能够仅为当前shell禁用sudo超时。

类似于:

sudo --disable-timeout

现在,我应该能够在当前shell中运行sudo,而无需重新输入密码,也无需运行sudo -k

这样的事情可能吗?还是我必须编写一个包装脚本,定期为我刷新sudo会话?

这里有一个可能的解决方法。编写这样的脚本(例如sudo-stay-validated.sh(:

#!/bin/bash
while true; do
sudo -v
sleep 60
done

在sudo应该保持有效的终端中运行脚本:

$ bash sudo-stay-validated.sh

按Ctrl+Z将其置于后台,然后记住运行$ bg以在后台恢复脚本。

这将使sudo在当前shell中保持有效性,直到它关闭为止。

对于当前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

或者:

cd /etc/sudoers.d
sudo visudo -f username
Defaults        env_reset,timestamp_timeout=30    # timeout in minutes

特殊值:

  • -1:无超时
  • 0:每次得到提示

通常,sudo超时是出于(安全(原因。当你(成功地(试图绕过超时时,你就会削弱系统的安全性。因此,让我们再看一看上面提到的问题:你运行了一个很长的作业,一段时间后sudo要求输入密码并超时。你建议阻止须藤索要密码。或者,防止sudo超时。看跌:

Defaults passwd_timeout=0

进入您的sudoers文件,让sudo等待您输入密码。这将防止您的超时问题,但在您输入密码之前,将暂停您的构建。从好的方面来说,您可以避免损害安全性。

或者,由于您特别提到了yay,因此yay有一个命令行选项,它可以在后台调用sudo以防止超时。来自man sway:

--sudoloop
Loop sudo calls in the background to prevent sudo from timing out during long builds.

为什么不使用屏幕呢?使用ssh连接,启动屏幕,启动您的命令屏幕解除连接。然后,当您准备检查是否已完成程序时,请再次连接。但最好将电子邮件通知发送到特殊的电子邮件地址,您的手机会通知您工作已经完成(我希望您或多或少有现代化的手机(。https://linux.die.net/man/1/screen

最新更新