将密码传递给sudo以获取期望输入

时间:2018-06-01 10:24:09

标签: shell sudo

我正在尝试创建一个Shell脚本,并且(为了避免键入,此外忽略了与安全相关的问题)希望直接将密码传递给“sudo”命令,例如,

pword="mypassword"
echo $pword | sudo -S whoami

这很好用。但是现在当命令本身需要输入时,这种方法似乎失败了,例如,

echo $pword | sudo -S cat<<<"Hello"

这会导致“密码错误”错误。目前,我的解决方案是首先运行一个“虚拟命令”,如第一个例子,并使用第二个命令系统不会再次提示输入密码的事实。但是,有没有人知道一个更好的解决方案让它工作?

1 个答案:

答案 0 :(得分:1)

您可以推迟激活&#34; here here&#34; (<<<构造)通过这样做:

  echo $pw | sudo -S sh -c ' cat <<<"Hello" '

更好的解决方案是在首先定义sudo -A环境变量以引用将发出密码的程序后,使用sudo -S而不是$SUDO_ASKPASS。然后,您不必担心与命令行的其余部分竞争stdin。您应该创建askpass程序(它可以是一个shell脚本),使其只能由您自己读取,写入和执行,以便您的密码安全地隐藏在程序中。