我正在尝试创建一个Shell脚本,并且(为了避免键入,此外忽略了与安全相关的问题)希望直接将密码传递给“sudo”命令,例如,
pword="mypassword"
echo $pword | sudo -S whoami
这很好用。但是现在当命令本身需要输入时,这种方法似乎失败了,例如,
echo $pword | sudo -S cat<<<"Hello"
这会导致“密码错误”错误。目前,我的解决方案是首先运行一个“虚拟命令”,如第一个例子,并使用第二个命令系统不会再次提示输入密码的事实。但是,有没有人知道一个更好的解决方案让它工作?
答案 0 :(得分:1)
您可以推迟激活&#34; here here&#34; (<<<
构造)通过这样做:
echo $pw | sudo -S sh -c ' cat <<<"Hello" '
更好的解决方案是在首先定义sudo -A
环境变量以引用将发出密码的程序后,使用sudo -S
而不是$SUDO_ASKPASS
。然后,您不必担心与命令行的其余部分竞争stdin。您应该创建askpass程序(它可以是一个shell脚本),使其只能由您自己读取,写入和执行,以便您的密码安全地隐藏在程序中。