什么是按需启动“sudo”的好方法,以便它现在(方便时)而不是稍后(不方便时)询问我的密码?

Maj*_*jal 40 linux sudo command-line credentials

这是黑客行为。

我有时需要在终端中快速运行一个又一个的程序,其中一些命令需要,sudo而另一些则不需要,例如:

$ command1; c2; sudo c3 | c4; c5 | sudo c6; c7; sudo c8
Run Code Online (Sandbox Code Playgroud)

我想sudo先启动(也称为输入密码) ,这样等待密码command1时就不会出现瓶颈。c3

大多数时候,我会sudo使用在键盘上随意输入的随机命令,例如:

$ sudo laksdfjlskjf; command1; c2; sudo c3 | c4; c5 | sudo c6; c7; sudo c8
Run Code Online (Sandbox Code Playgroud)

它说command not foundfor laksdfjlskjf,但我已经成功完成了我需要做的事情:启动sudo。没有瓶颈c3

问题:

有没有比输入(非)随机字符来启动更好的方法sudo?是否有一个不执行任何操作并且可以安全使用的安全命令sudo

Kam*_*ski 62

sudo -v正是为了这个。从man 8 sudo

-v--validate
更新用户的缓存凭据,必要时对用户进行身份验证。对于 sudoers 插件,sudo默认情况下这会将超时时间再延长 5 分钟,但不会运行命令。并非所有安全策略都支持缓存凭据。

补充命令是sudo -k,它使用户缓存的凭据无效。

虽然我认为sudo -v这是正确的事情,但我承认人们必须记住在不查阅手册的情况下使用它的选项。这是一个缺点。作为替代方案,几乎任何无害的命令都可以用来sudo实现您的目标;-v因此,如果您暂时不记得,请使用sudo true,sudo echosudo date(学分转到链接的答案)。


sudo -v在您原来的方法有效的情况下应该对您有用。在您的示例中,如果command1并且c2花费的时间比sudo忘记缓存的凭据所需的时间更长,那么sudo c3 要求您提供密码。等等。sudo -v可以替换您的sudo laksdfjlskjf,但如果前面的命令长时间运行,则两者sudo都不起作用。

如果您要运行的行在某些命令之前包含长时间运行的命令(不排除sudo命令)sudo,请考虑sudo -v在后台足够频繁地重复。例子:

sudo -v    # in the foreground, so you can input your password if needed
while sudo -v; do sleep 58; done &
command1; c2; sudo c3 | c4; c5 | sudo c6; c7; sudo c8; kill "$!"
Run Code Online (Sandbox Code Playgroud)

  • @reinierpost它不运行“true”,它是一个单独的可执行文件并作为单独的子进程运行。创建新流程的成本很高。但即使是在最快的闲置计算机上,最好不要徒劳地创建一个新进程。 (3认同)
  • 请注意,这个解决方案和OP的原始解决方案都不适用于长时间运行的命令。密码缓存取决于超时,并且可能会在非 sudo 命令成功之前过期。 (2认同)
  • 我喜欢“sudo whoami”。它输出“root”以表明它有效。 (2认同)

小智 23

怎么样true?描述:真正的实用程序总是以退出代码零返回。

如果您想要更短的内容,请尝试id。它返回用户身份(并且不会以任何方式更改系统)。

  • 虽然我认为我的答案(“sudo -v”)是正确的,但我投票赞成这个答案,因为“sudo true”将是我的第二选择。 (6认同)
  • 运行任何外部命令(相对于内部开关 -v)的一个问题是您正在以提升的权限运行该命令。此外,您必须将外部命令设置为允许使用 sudo 运行。 (2认同)
  • 与“sudo -v”相比,此解决方案的优点是,如果您完全禁用密码提示(通过将“username ALL=(ALL) NOPASSWD: ALL”添加到“sudo visudo”),则“sudo -v”将要求您输入密码无论如何,密码,而“sudo true”则不会。 (2认同)

小智 7

简单的echoecho -n抑制换行符怎么样?