我正在使用 DeployHQ 运行一些脚本作为部署前/部署后的一部分,我需要能够在一行上调用脚本,并且为了避免终端出现反馈,我想将密码传递到 sudo 命令中(而不是 sudo 在使用时询问密码)
我正在尝试通过做类似的事情sudo
来开展工作;stdin
echo my_password | sudo -S chown -R my_user:www-data /srv/www/my_site/public_html/
但返回的是;
[sudo] password for my_user:
Sorry, try again.
[sudo] password for my_user:
sudo: 1 incorrect password attempt
有问题的密码是正确的,并且当运行该命令时-S
,系统会提示用户输入密码,这样就有效了。
有人能指出我做错什么吗?
只是为了澄清一下 - 我希望仍然有一个密码,只有一个我可以传递的密码。
答案1
来自 sudo 手册:
-S(stdin)选项使 sudo 从标准输入而不是终端设备读取密码。密码后面必须有一个换行符。这意味着你应该以 \n 结尾密码
编辑:我做了几个测试,老实说,在我的测试系统中你的语法工作正常。(echo mypass | sudo -S ....)
第二次编辑:尝试使用以下语法:echo -e "mypass\n" | sudo -S command
答案2
我不知道哪里出了问题
但是,如果你想在不提示输入密码的情况下运行 sudo,你可以通过编辑 sudo 配置文件来实现。为此,请使用命令visudo
默认文件有很多示例,因此只需搜索NOPASSWD
,您就会找到一个可以开始使用的示例