如何通过命令行自动响应密码提示?

时间:2017-02-08 18:15:25

标签: linux bash unix command-line terminal

我希望在linux终端中回复密码提示。我知道如何使用echo和非密码提示执行此操作。例如,假设whatsyourname.sh在运行后提示我输入一个带有我名字的字符串,但是不允许我的名字在inital命令中作为参数传递。我会做以下事情:

echo -e "dan" | ./whatsyourname.sh

但是,如果我在运行后运行了一个要求我输入密码的命令,则以下内容不起作用:

echo -e "supersecurepassword" | sudo apt-get update

我猜这与在命令行输入密码时隐藏字符这一事实有关。我如何在初始命令中回复密码提示?

1 个答案:

答案 0 :(得分:4)

您正在寻找sudo -S

解释-S - man sudo

  

-S, - stdin                    将提示写入标准错误并从标准输入中读取密码而不是                    使用终端设备。密码必须后跟换行符。

简单,

#!/bin/bash
echo "notsecure" | sudo -S apt-get update

变量,

#!/bin/bash
pass="notsecure"
echo $pass | sudo -S apt-get update

让我们输入它,

#!/bin/bash
read -s -p "[sudo] sudo password for $(whoami): " pass
echo $pass | sudo -S apt-get update

解释-s和-p - help read

  

-r不允许反斜杠转义任何字符

     

-s不回显来自终端的输入

如果您创建一个记录到多个服务器的脚本以便查看route -n,那么很方便。