如何避免 sudo 提示输入密码?

如何避免 sudo 提示输入密码?

我知道我可以通过命令成为 root(超级用户),su但我必须在输入命令后授权。有没有办法让我在一行中成为 root 并授权(使用密码)

答案1

在终端运行visudo命令来编辑sudoers文件:

sudo visudo

并将以下行添加到sudoers 列表

username ALL = NOPASSWD : ALL

注意:替换用户名和你的真实用户名在上面那一行。

答案2

嗯,我唯一能想到的是

echo 'password' | sudo -S command

-S标志使您可以sudo从标准输入读取密码。如以下说明man sudo

-S,--标准输入

将提示写入标准错误并从标准输入读取密码,而不是使用终端设备。密码后面必须跟换行符。

因此,要ls使用sudo特权运行,你可以这样做

echo 'password' | sudo -S ls

sudo请注意,如果您的访问令牌处于活动状态,并且您不需要输入密码(因为您最近已经输入过密码),则会产生错误。要解决这个问题,您可以使用-k重置访问令牌:

echo 'password' | sudo -kS ls

我不知道有什么方法可以让你进入真正的 root shell(例如susudo -i)。不过这可能足以满足您的需要。

答案3

echo 'password' | sudo -kS ls解决方案有效,但它有一些安全缺陷,其中大部分已在 terdon 的答案的评论中提到。因此,我想建议一种不同的方法:

如果你经常需要执行的命令只有一个,例如apt-get upgrade,你可以配置你的系统,sudo someCommand使其不是需要密码。

为此,运行visudo并输入类似以下内容:

myusername ALL=(ALL) NOPASSWD: /usr/bin/apt-get upgrade

请注意,如果您输入命令没有一个参数(例如upgrade在这个例子中没有),用户将被允许使用任何参数,所以请谨慎使用。

答案4

您不必完全删除密码,而是可以增加超时时间,以便每天只需输入几次密码;在终端中运行:

sudo visudo

在文件末尾,添加以下行以设置 30 分钟的超时时间(替换jsmith为您的用户名)。

Defaults:jsmith timestamp_timeout=30

您可以使用任意数字;-1表示无超时(仅在第一次时提示),0表示立即超时(每次都提示sudo)。默认超时为 5 分钟。

相关内容