如何为bash中提示输入密码的命令提供密码?

我正在编写一个UNIX shell函数,该函数将执行将提示用户输入密码的命令。我想将密码硬编码到脚本中并将其提供给命令。我试过将密码传递到命令中,如下所示:


function() {

    echo "password" | command

}

对于某些命令,这可能不起作用,因为该命令可能在提示输入密码之前刷新输入缓冲区。


我也尝试过将标准输入重定向到包含这样的密码的文件,但这也不起作用:


function() {

    echo "password" > pass.tmp

    command < pass.tmp

    rm pass.tmp

}

我知道有些命令允许将密码作为参数提供,但是我宁愿通过标准输入。


我正在寻找一种在bash中将密码传递到命令中的快捷方法。


交互式爱情
浏览 1207回答 3
3回答

潇湘沐

看一看autoexpect(在这里不错的教程)。它几乎不带欺骗性就可以使您快速而又肮脏。

慕尼黑5688855

如何使用autoexpect将密码传递到命令中:这些步骤在Ubuntu 12.10桌面上进行了说明。您分发的确切命令可能略有不同。这很危险,因为您可能会将使用的任何密码暴露给可以读取autoexpect脚本文件的任何人。请勿通过这样的方式通过管道传递您的root密码或超级用户密码。根工具包将立即发现此问题,您的盒子将归拥有。EXPECT产生一个进程,读取输入的文本,然后发送脚本文件中预定义的文本。请确保您有expect与autoexpect安装:sudo apt-get install expectsudo apt-get install expect-dev阅读它:man expectman autoexpect转到您的主目录:cd /home/el用户el无法将文件授予root用户,必须输入密码:touch testfile.txtsudo chown root:root testfile.txt&nbsp;&nbsp; &nbsp;[enter password to authorize the changing of the owner]这是我们要自动执行的密码输入。重新启动终端,以确保sudo再次要求我们提供密码。再次转到/ home / el并执行以下操作:touch myfile.txtautoexpect -f my_test_expect.exp sudo chown root:root myfile.txt&nbsp; &nbsp; [enter password which authorizes the chown to root]autoexpect done, file is my_test_expect.exp您已创建my_test_expect.exp文件。您的超级秘密密码以纯文本格式存储在此文件中。这会让您非常不舒服。通过尽可能地限制权限和所有权来减轻不适感:sudo chown el my_test_expect.exp&nbsp; &nbsp; &nbsp;//make el the owner.sudo chmod 700 my_test_expect.exp&nbsp; &nbsp; //make file only readable by el.您会在以下内容的底部看到这些命令my_test_expect.exp:set timeout -1spawn sudo chown root:root myfile.txtmatch_max 100000expect -exact "\[sudo\] password for el: "send -- "YourPasswordStoredInPlaintext\r"expect eof您将需要验证上述期望命令是否合适。如果autoexpect脚本过于敏感或不够敏感,则它将挂起。在这种情况下,这是可以接受的,因为期望值正在等待始终到达的文本。以el用户身份运行expect脚本:expect my_test_expect.exp&nbsp;spawn sudo chown root:root myfile.txt[sudo] password for el:&nbsp;my_test_expect.exp中包含的密码由用户el通过管道传递给root用户。要查看密码是否被接受,请查看myfile.txt:ls -l-rw-r--r--&nbsp; 1 root root&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 Dec&nbsp; 2 14:48 myfile.txt之所以有效,是因为它是root用户,并且el从未输入密码。如果使用此脚本公开您的root,sudo或超级用户密码,那么在您的机器上获取root将会很容易。这是对安全系统的惩罚,这种安全系统可以使每个人都没有问题。

喵喵时光机

您可以使用该-S标志从标准输入中读取。在下面找到一个示例:function shutd(){&nbsp; echo "mySuperSecurePassword" | sudo -S shutdown -h now}&nbsp; &nbsp;&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP