我定期通过 SSH 登录到 boxen,并以 root 身份运行更新等,使用sudo
.
我很感激sudo
在一段时间后要求输入密码,以防我离开终端等。但由于我已经输入了登录密码或 SSH 密钥短语,我不希望在 登录后的前 n 分钟内要求输入密码,而是表现得好像 sudo 在登录后立即成功执行一样。sudo
这是否可以配置为登录后首次调用不需要密码?
举例说明所需的行为
ssh [email protected]
[~]$ sudo somecommand
[~]$ #no password asked.
[~]$ sudo somecommand #n minutes later
[sudo] password for foo:
这是如何完成的一个想法。 注意:这是一个 hack;仅当无密码 sudo使您的眉毛想要爬到头骨上时才使用。
前提是:我们不能将登录凭据传递给
sudo
. 所以问题是如何在NOPASSWD
登录的前几分钟使用 sudo。我们可以通过在NOPASSWD
模式下启动登录 shell 并产生一个后台进程来做到这一点,在.bashrc
该进程中,几分钟后撤消NOPASSWD
.当然,脚本本身必须以
NOPASSWD
sudo 启动,否则仍会提示我们输入密码。 并且脚本必须在 bash 会话结束时恢复NOPASSWD
规则,以便NOPASSWD
为下次登录设置。这是执行此操作的脚本
$HOME/nopasswd-sudo
:在第一次运行时(必须从命令行执行,而不是从 执行
.bashrc
),脚本会创建/etc/sudoers.d/nopasswd-sudo-$USER
包含NOPASSWD
已登录通配符的文件$USER
:然后在每次登录时,它都会启动并在后台等待,直到无密码时间结束,之后它会删除文件,下一次
sudo
将需要密码。之后,它会无限期地等待(实际上最多等待 12 小时,以防止遗漏其父级 HUP 信号的孤儿),或者直到其父级登录 shell 结束。就在它退出之前,它的 EXIT 陷阱会重新创建
NOPASSWD
文件。sudo
给喜欢冒险的人的提示:当你弄乱登录脚本或规则时,请记住始终打开一个单独的 root shell 。你不会是第一个把自己锁在外面的人。