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

Tra*_*les 7 unix linux bash terminal command-line

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

echo -e "dan" | ./whatsyourname.sh
Run Code Online (Sandbox Code Playgroud)

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

echo -e "supersecurepassword" | sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

我猜这与在命令行中输入密码时隐藏字符有关。我将如何响应初始命令中的密码提示?

小智 5

您正在寻找sudo -S

解释-S-man sudo

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

简单的,

#!/bin/bash
echo "notsecure" | sudo -S apt-get update
Run Code Online (Sandbox Code Playgroud)

多变的,

#!/bin/bash
pass="notsecure"
echo $pass | sudo -S apt-get update
Run Code Online (Sandbox Code Playgroud)

我们还是打字吧

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

解释 -s 和 -p -help read

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

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

route -n例如,如果您制作一个登录多个服务器进行查看的脚本,那么这会很方便。