如何使用 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脚本结束。