使用带有密码的sudo作为参数[关闭]


83

我想使用密码作为参数运行sudo,以便可以将其用于脚本。我试过了

sudo -S mypassword execute_command

但没有成功。有什么建议么?


2
您应该只检查脚本是否由“ root”运行。回显密码很不好,它会在历史记录中找到...
kbdjockey

4
最好进行sudo适当的配置,以免为某些程序/用户/组询问密码,以免造成此类恶意攻击。

Answers:


183

-S开关使sudo从STDIN读取密码。这意味着你可以做

echo mypassword | sudo -S command

将密码传递给sudo

但是,出于安全方面的考虑,其他不建议在命令中传递密码的建议(例如检查用户是否为root)可能是更好的主意。


的工作,非常感谢!
normalUser 2014年

拯救了我的一天,非常感谢!!!
AdrianES

怎么样把它放在一个专门的文件夹给它和文件夹只执行权限:sudo chmod -R 0100 myScriptFolder?那不能解决安全性问题吗(前提是没有人以您的计算机为root用户)?
Brōtsyorfuzthrāx

或者,在某些情况下,本地网络外部的黑客能否以某种方式看到脚本文本?
Brōtsyorfuzthrāx

在我的OSX机器上,这对我来说就像冠军!非常感谢您分享解决方案!
Wulf

51

您可以s为脚本设置该位,以使其不需要sudo并以root身份运行(并且您无需在脚本中写入root密码):

sudo chmod +s myscript

+1。这比其他方法更好(也更安全)。
Burkhard

1
粘位是不好的习惯吗?
kbdjockey 2012年

@kbdjockey-+s是setuid位。+t是粘性位。
罗伯(Robᵩ)2012年

@Rob -谢谢你澄清
kbdjockey

4
请注意,大多数操作系统会忽略已解释脚本文件的此标志。这在二进制文件上确实很好用。
Magnar

26
echo -e "YOURPASSWORD\n" | sudo -S yourcommand

当我有命令参数时,此方法不起作用。例如。echo -e "YOURPASSWORD\n" | sudo -S "run -x"。它说sudo: run -x: command not found。任何想法如何解决这个问题?
Bee

1
@Bhathiya根本不使用“引号”,例如:echo -e“ YOURPASSWORD \ n” | sudo -S ls -l / root
matteomattei 17-10-19

太好了,谢谢...
Bee

3

一种选择是使用-A标志进行sudo。这将运行一个程序来询问密码。而不是询问,您可以拥有一个仅吐出密码的脚本,以便程序可以继续。


-3
# Make sure only root can run our script
if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

4
这不能回答OP的问题。
codeforester
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.