当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

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

最佳解决办法

嗯,我唯一能想到的是

echo 'password' | sudo -S command

-S标志使sudo从标准输入读取密码。如man sudo中所述:

-S, –stdin

Write the prompt to the standard error and read the password from the standard input instead of using the terminal device. The password must be followed by a newline character.

那么,要使用sudo权限运行ls,你会这样做

echo 'password' | sudo -S ls

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

echo 'password' | sudo -kS ls

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

次佳解决办法

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

sudo visudo

并将以下行添加到sudoers列表中

username ALL = NOPASSWD : ALL

注意:将用户名替换为上一行中的真实用户名。

第三种解决办法

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

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

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

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

请注意,如果输入不带参数的命令(例如,在此示例中没有upgrade),则允许用户使用任何参数运行它,因此请小心使用。

第四种办法

你也可以这样做:

sudo -S <<< "password" command

第五种办法

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

sudo visudo

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

Defaults:jsmith timestamp_timeout=30

你可以使用你想要的任何数字; -1表示没有超时(仅在第一次提示时),而0表示即时超时(每次sudo时都会提示)。默认超时为5分钟。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1342.html,未经允许,请勿转载。