为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

交互式爱情 2019-11-29 15:31:14
我正在编写一个UNIX shell函数,该函数将执行将提示用户输入密码的命令。我想将密码硬编码到脚本中并将其提供给命令。我试过将密码传递到命令中,如下所示:function() {    echo "password" | command}对于某些命令,这可能不起作用,因为该命令可能在提示输入密码之前刷新输入缓冲区。我也尝试过将标准输入重定向到包含这样的密码的文件,但这也不起作用:function() {    echo "password" > pass.tmp    command < pass.tmp    rm pass.tmp}我知道有些命令允许将密码作为参数提供,但是我宁愿通过标准输入。我正在寻找一种在bash中将密码传递到命令中的快捷方法。
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

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


查看完整回答
反对 回复 2019-11-29
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

如何使用autoexpect将密码传递到命令中:


这些步骤在Ubuntu 12.10桌面上进行了说明。您分发的确切命令可能略有不同。


这很危险,因为您可能会将使用的任何密码暴露给可以读取autoexpect脚本文件的任何人。


请勿通过这样的方式通过管道传递您的root密码或超级用户密码。根工具包将立即发现此问题,您的盒子将归拥有。


EXPECT产生一个进程,读取输入的文本,然后发送脚本文件中预定义的文本。


请确保您有expect与autoexpect安装:


sudo apt-get install expect

sudo apt-get install expect-dev

阅读它:


man expect

man autoexpect

转到您的主目录:


cd /home/el

用户el无法将文件授予root用户,必须输入密码:


touch testfile.txt

sudo chown root:root testfile.txt 

   [enter password to authorize the changing of the owner]

这是我们要自动执行的密码输入。重新启动终端,以确保sudo再次要求我们提供密码。再次转到/ home / el并执行以下操作:


touch myfile.txt


autoexpect -f my_test_expect.exp sudo chown root:root myfile.txt


    [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     //make el the owner.

sudo chmod 700 my_test_expect.exp    //make file only readable by el.

您会在以下内容的底部看到这些命令my_test_expect.exp:


set timeout -1

spawn sudo chown root:root myfile.txt

match_max 100000

expect -exact "\[sudo\] password for el: "

send -- "YourPasswordStoredInPlaintext\r"

expect eof

您将需要验证上述期望命令是否合适。如果autoexpect脚本过于敏感或不够敏感,则它将挂起。在这种情况下,这是可以接受的,因为期望值正在等待始终到达的文本。


以el用户身份运行expect脚本:


expect my_test_expect.exp 

spawn sudo chown root:root myfile.txt

[sudo] password for el: 

my_test_expect.exp中包含的密码由用户el通过管道传递给root用户。要查看密码是否被接受,请查看myfile.txt:


ls -l

-rw-r--r--  1 root root          0 Dec  2 14:48 myfile.txt

之所以有效,是因为它是root用户,并且el从未输入密码。如果使用此脚本公开您的root,sudo或超级用户密码,那么在您的机器上获取root将会很容易。这是对安全系统的惩罚,这种安全系统可以使每个人都没有问题。


查看完整回答
反对 回复 2019-11-29
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

您可以使用该-S标志从标准输入中读取。在下面找到一个示例:


function shutd()

{

  echo "mySuperSecurePassword" | sudo -S shutdown -h now

}    


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 1201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信