$ ./configure && make && sudo make install && halt
睡觉,希望可以自动安装该应用程序。但是第二天我看到的是sudo向我询问密码的屏幕。那么,如何在一个命令行中使用密码运行sudo,或者有其他方法可以执行此操作?
#1 楼
是的,请使用从STDIN读取密码的-S
开关:$echo <password> | sudo -S <command>
因此,您的情况如下所示:
$./configure && make && echo <password> | sudo -S make install && halt
当然,用您的密码替换
<password>
。评论
显然,如果有人在外壳程序历史记录中看到密码有任何危险,那就不想运行它。
–布雷特·丹尼尔(Brett Daniel)
2009年11月9日,3:16
寻找在远程主机上运行特权命令的快速方法,这很有效。
–nelaaro
2011年9月15日上午11:08
如果您决定使用'echo
– Shannon Haworth
13年5月14日在17:38
如果您在$ VARIABLE中输入密码,则可能要使用该密码(例如,可以使用sops进行配置)
– Natim
17年9月6日在9:25
9年后,仍然像魅力一样发挥作用:)
–WinEunuuchs2Unix
18/09/23在21:20
#2 楼
将HISTIGNORE设置为“ sudo -S”$ export HISTIGNORE='*sudo -S*'
,然后将密码安全地传递给sudo:
$ echo "your_password" | sudo -S -k <command>
“ HISTIGNORE”表示不将此命令保存到历史记录中。那就是内存或“〜/ .bash_history”文件中的历史记录。
例如,以下内容将安全地将您的密码传递给sudo命令,而不会
保留密码的历史记录。
“ -S”表示使用stdin作为密码,
“ -k”表示忽略缓存的凭据以强制sudo
始终询问。这是为了保持一致的行为。
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -k whoami
$ echo "<your_password>" | sudo -S -k cat /etc/shadow
$ echo "<your_password>" | sudo -S -k bash /tmp/myscript.sh
上面方法的缺点是,如果您想查看以后在历史记录中运行的命令,则不会那里。另一种方法是更新sudo身份验证凭据缓存(默认情况下启用5分钟超时),然后分别运行sudo。但这有个缺点,您需要注意5分钟的缓存。
例如:
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -v
$ sudo whoami
$ echo "<your_password>" | sudo -S -v
$ sudo cat /etc/shadow
$ echo "<your_password>" | sudo -S -v
$ sudo /tmp/myscript.sh
注意我在每个命令之前运行sudo以确保更新了sudo缓存,因为默认值为5分钟。是的,whoami不需要花5分钟的时间,但我认为最好还是在每个命令之前运行它,以确保一致性。您也可以在〜/ .bashrc文件中放入“ export HISTIGNORE ='sudo -S'”,然后用“。〜/ .bashrc”加载它,或者注销然后登录。但是,我正在考虑将其用于脚本目的,因此,为了获得最佳安全性实践,我将其保留在所有脚本的顶部。将“ echo”“ | sudo -S -v”设置为变量也可能是一个好主意,然后只需在需要根特权的每个命令之前运行该变量,请参阅Janar的注释。 “ John T”的注释还应该包含“ -k”参数,就像您在不带“ -k”的情况下运行“ sudo -S”并且sudo身份验证缓存已经具有您的凭据一样(并且仍然有效,默认的sudo身份验证缓存为5分钟),然后bash会以命令的方式运行您的密码,这很糟糕。
评论
就像关于使历史记录中不可用的内容的小注释一样,请在命令前面的单个空格处运行命令。由于某种原因,这会导致历史忽略它。
–马特·弗莱彻(Matt Fletcher)
17年8月2日在8:20
感谢-k提示!
–塞尔吉奥·阿布鲁(Sergio Abreu)
20年4月11日在6:39
如果将密码放入命令行参数,则在ps的输出中所有人都可以看到该密码。最好将其放在文件中并使用间接寻址(sudo -S -v
– bobbogo
20-4-14上午17:42
#3 楼
您还可以使用visudo
配置sudo,以允许用户在没有密码的情况下将make用作sudo。User_Alias USERS = your_user
Cmnd_Alias CMDS = /usr/bin/make
USERS ALL = (ALL) NOPASSWD: CMDS
评论
我发现不需要声明别名。添加my_user ALL =(ALL)NOPASSWD:/ usr / bin /您的命令正常。请记住将其添加到最后以覆盖其他配置。
–李俊乐
20年1月20日,12:38
#4 楼
您可以使用以下命令替换命令行:$sudo su
$./configure && make && make install && halt
系统将立即提示您输入密码,然后其余命令将以超级用户身份运行。
评论
备用(可能是首选)版本:sudo sh -c“ ./configure && make && make install && halt”
–嘎嘎吉qua德
09年9月9日,下午3:51
但是,不是所有生成的编译文件都具有超级用户权限吗?这样可以防止您以后以普通用户身份运行./configure && make。
–user45909
13年8月4日在23:35
是的,user45909,您说的很对。我个人从来没有重新运行过./configure && make,除非仍然下载了主程序包的更新后,但是我可能并不典型。
– CarlF
13年8月6日在19:48
#5 楼
其他一些解决方案的缺点是它们不必要以root用户身份运行./configure
和make
。这有点令人费解,但它应该可以工作:
sudo sh -c "su $USER -c ./configure && su $USER -c make && make install && halt"
请注意使用双引号允许
$USER
被(非root用户)外壳扩展。我也可能在
sleep 60
命令之前添加halt
。我有时会做这样的事情,期望命令能运行很长时间,但是出了点问题,它立即终止; sleep
让我在系统关闭之前取消命令。或者您可以将shutdown
与时间参数一起使用。#6 楼
您也可以执行以下操作:sudo -S <<< "password" command
评论
在Mac OS中,只有这个对我有用。
– Sabrina
19年9月19日19:30在
#7 楼
请注意,我发现该方法不适用于较旧版本的sudo,特别是“ Sudo版本1.6.7p5”:$ echo "<your_password>" | sudo -S -k whoami
此方法的作用所在在旧版本和新版本上工作sudo:
$ echo "<your_password>" | sudo -S -v
$ sudo whoami
评论
这不是原始问题的答案。要批评或要求作者澄清,请在其帖子下方留下评论-您始终可以对自己的帖子发表评论,一旦您拥有足够的声誉,就可以在任何帖子中发表评论。
–DavidPostill♦
2014年12月8日15:25
@Darren DeHaven:能否请您解释一下如何成为这里提出的问题的答案?
– Renju Chandran chingath
2014年12月8日15:50
#8 楼
如果要多加注意,可以制作一个脚本,更改文件的权限,以便只有root可以读取和编辑,然后才可以运行它。示例:
1)创建文件:
gedit ~/.easy.install
2)粘贴并保存:
./configure && make && echo <password> | sudo -S make install && halt
3)使其可执行:
sudo chmod +x ~/.easy.install
4)更改文件的权限,以便只有root可以读取和编辑它:
sudo chmod 700 ~/.easy.install
5)运行:
~/.easy.install
享受;-)
评论
echo
– bobpaul
18年4月18日在17:26
#9 楼
如果有人偶然发现sudo不需要您的帐户密码,那么像这样设置sudo将会很危险。除非您知道自己在做什么,否则不要这样做。在我的本地A +培训计划中,我的实验计算机已经发生了太多次了... -_-虽然约翰T.说的听起来不错,但仍然存在以下风险:在shell历史记录中找到密码。 CarlF所说的听起来更好,但是如果一个命令失败,则计算机仍将以超级用户权限运行。
#10 楼
就我个人而言,我的行为与John T在09年11月9日2:47回答的完全相同,我还根据他的回答进行了改进,谢谢。区别在于我倾向于使用变量,例如:
AutoSuDo=$" $echo pass | sudo -S";
# Change AutoSuDo to something else.
# Note that string starts with space,
# useful only if used as first command in line
这样,我可以轻松地使用我的变量而不是sudo,
$AutoSuDo apt-get update;
有些较长的脚本很方便。我主要将这些用于我必须维护的其他个人计算机。
我还建议注意:
desgua 4月答复19年11月19日23:56
user224306于13年5月14日17:38发表评论,John T于09年11月9日2:47回答
#11 楼
问题已解决。例如,以用户root:
echo -e 'password\npassword\n' | sudo passwd root
评论
-e标志有什么作用,@ jerson Martinez?
–user674669
19年4月25日在18:00
echo的-e标志允许它将某些序列解释为具有特殊含义。
–安东尼奥·莫雷诺(Antonio Moreno)
19年4月26日在15:03
评论
您需要停止以root身份运行。sudo不会有15分钟的超时时间吗?您是否不能运行sudo ls或类似的东西,输入密码,然后在仍然具有sudo权限的情况下运行上述命令? (我目前无法对此进行测试,否则我会将其发布为答案。)
sudo上的超时是可配置的。安全意识强的人(又像我一样偏执狂)将其设置为零... :-)
另请参阅在bash脚本中提示输入sudo密码并以编程方式提升特权?,如何在需要sudo的bash脚本中仅输入一次密码,如何从脚本内请求root特权,在脚本中创建sudo用户而不提示输入密码... ,如何提示用户输入sudo密码?等