首页 > 解决方案 > 将密码传递给 sudo 以获取需要输入的命令

问题描述

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

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

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

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

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

标签: shellsudo

解决方案


您可以通过执行以下操作来延迟“此处文档”(<<<构造)的激活:

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

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


推荐阅读