如何使用 while 循环实现 SPAWN 命令以多次提供 'password'?
How can I implement SPAWN command with while loop to provide 'password' multiple times?
我正在尝试编写一个脚本,其中基于 input.txt 文件中的给定主机名列表,
我必须为用户 - alex.
将文件从源服务器复制到目标服务器
所有主机的密码都相同。
这每次都要求输入密码,我尝试使用 SPAWN 命令进行 expect 和 send。
下面的脚本会自动给出密码,只针对第一次提示。
我知道还有其他方法,例如 SSH 密钥和无密码身份验证。
但是 我的确切要求是当我触发脚本时 - copying.sh 它会多次询问“密码”,
在这个例子中有 3 次,因为有 3 个不同的主机,我应该能够从 spawn_file.exp.
发送它
有人可以帮助我如何实施它以及我应该做出哪些改变吗?
# copying.sh
#------------------------
while read line
do
scp /usr/file.txt alex@${line}://home/temp/
done < input.txt
#Spawn_file.exp
#------------------------
set timeout -1
spawn sh copying.sh
match_max 100000
expect -exact "Password: "
send -- "abcd1234"
expect eof
#input.txt
#------------------------
hostname1
hostname2
hostname3
这是您使用 exp_continue
命令的地方:
#Spawn_file.exp
#------------------------
set timeout -1
spawn sh copying.sh
match_max 100000
expect {
-exact "Password: " {
send -- "abcd1234"
exp_continue
}
eof
}
expect
语句将等待 “密码”或 eof。
- 如果看到密码提示,将发送密码,我们将在 expect 语句中“循环”
- 如果看到
eof
,则没有动作,expect语句结束,然后expect脚本结束。
我正在尝试编写一个脚本,其中基于 input.txt 文件中的给定主机名列表,
我必须为用户 - alex.
将文件从源服务器复制到目标服务器
所有主机的密码都相同。
这每次都要求输入密码,我尝试使用 SPAWN 命令进行 expect 和 send。
下面的脚本会自动给出密码,只针对第一次提示。
我知道还有其他方法,例如 SSH 密钥和无密码身份验证。
但是 我的确切要求是当我触发脚本时 - copying.sh 它会多次询问“密码”, 在这个例子中有 3 次,因为有 3 个不同的主机,我应该能够从 spawn_file.exp.
发送它有人可以帮助我如何实施它以及我应该做出哪些改变吗?
# copying.sh
#------------------------
while read line
do
scp /usr/file.txt alex@${line}://home/temp/
done < input.txt
#Spawn_file.exp
#------------------------
set timeout -1
spawn sh copying.sh
match_max 100000
expect -exact "Password: "
send -- "abcd1234"
expect eof
#input.txt
#------------------------
hostname1
hostname2
hostname3
这是您使用 exp_continue
命令的地方:
#Spawn_file.exp
#------------------------
set timeout -1
spawn sh copying.sh
match_max 100000
expect {
-exact "Password: " {
send -- "abcd1234"
exp_continue
}
eof
}
expect
语句将等待 “密码”或 eof。
- 如果看到密码提示,将发送密码,我们将在 expect 语句中“循环”
- 如果看到
eof
,则没有动作,expect语句结束,然后expect脚本结束。