当界面要求输入密码时,如何使用 shell 脚本提供密码

Posted

技术标签:

【中文标题】当界面要求输入密码时,如何使用 shell 脚本提供密码【英文标题】:how to use a shell script to supply a password when the interface asks for it 【发布时间】:2010-02-11 06:16:18 【问题描述】:

我有一个脚本(dobrt),它在执行时要求输入密码。我怎样才能编写一个脚本来执行 dobrt 并自动提供 密码 它要求。

当我执行 ./dobrt -p file.txt 时,系统要求输入密码。我希望脚本自动发送密码。这是输出

$ ./dobrt -p file.txt
Found 194 tests to execute
------------ 2010 February 11 11:27:33 ------------
Password: *************** 

我尝试为此使用 shell 和 expecxt 脚本。这就是我所做的。

我有 2 个脚本。我从第一个脚本(run_dobrt.sh)调用第二个脚本(run_dobrt.exp)。

脚本 1:run_dobrt.sh

#!/bin/ksh

TESTCASE_HOME="/home/abhijeet/code/testcases";
TESTCASE_LIST="file.txt";
PASSWORD="*****";

echo "Running Expect Script"
`./run_dobrt.exp $TESTCASE_HOME $TESTCASE_LIST $PASSWORD`

脚本 2:run_dobrt.exp

#!/usr/local/bin/expect -f
set TESTCASE_HOME [lindex $argv 0];
set TESTCASE_LIST [lindex $argv 1];
set PASSWORD [lindex $argv 3];

set timeout 200
spawn $TESTCASE_HOME/dobrt -p $TESTCASE_HOME/$TESTCASE_LIST
expect "*?assword:*" send -- "$PASSWORD\r";
expect eof

现在当我运行 run_dobrt.sh 时出现以下错误 run_dobrt.sh[20]:spawn:未找到 如何摆脱此错误并完成此任务?请帮忙。

【问题讨论】:

【参考方案1】:

什么是dobrt?是自制程序吗?如果是这种情况,我认为您将不得不重新编码以解析一个接受密码的额外参数。然后,您将能够将此密码传递给 dobrt,就像在命令行中执行“-p file.txt”一样(通过脚本)。

【讨论】:

不同密码的用户使用这个脚本。因此它不适合硬编码密码。 我没有正确解释自己。我的意思是让用户通过命令行参数输入密码。不要在应用程序中硬编码密码。【参考方案2】:

我看到两个问题:

    在 shell 脚本的最后一行,删除命令周围的反引号 ``, 它们将导致期望脚本的输出作为 shell 命令执行。

    在expect脚本中,改变

    设置密码 [lindex $argv 3];

set PASSWORD [lindex $argv 2]; 

你正在跳过一个论点。

【讨论】:

【参考方案3】:

如果密码是 dobrt 提示的唯一输入,你可以试试这个:

脚本 1:run_dobrt.sh

#!/bin/ksh 

TESTCASE_HOME="/home/abhijeet/code/testcases"; 
TESTCASE_LIST="file.txt"; 
PASSWORD="*****"; 

./run_dobrt.exp $TESTCASE_HOME $TESTCASE_LIST << EOF
$PASSWORD
EOF

【讨论】:

以上是关于当界面要求输入密码时,如何使用 shell 脚本提供密码的主要内容,如果未能解决你的问题,请参考以下文章

shell之expect应答语句(用shell脚本实现获取批量主机存活信息)

shell之expect应答语句(用shell脚本实现获取批量主机存活信息)

shell之expect应答语句(用shell脚本实现获取批量主机存活信息)

Shell脚本交互之:自动输入密码

SHELL脚本切换用户需输入密码

Linux 通过 shell 脚本修改密码