gpt4 book ai didi

expect - 在一个 Expect 脚本中处理多个语句

转载 作者:行者123 更新时间:2023-12-03 21:40:50 29 4
gpt4 key购买 nike

我是 Expect 脚本的新手。
我在 Linux 机器上为 ssh 编写了一个 Expect 脚本,在那里我在 ssh 到不同的 Linux 机器时遇到了问题。下面我复制了脚本。

!/usr/local/bin/expect

set LinuxMachine [lindex $argv 0]

spawn ssh root@$LinuxMachine


expect "root@$LinuxMachine's password:"

send "root123\n"

expect "[root@Client_FC12_172_85 ~]#"

send "ls"

interact
当我供应时 10.213.172.85从命令行 expect在第 4 行,它读取为“ root@10.213.172.85's password:”并成功登录
但有些 Linux 会期望
The authenticity of host '10.213.172.108 (10.213.172.108)' can't be established.
RSA key fingerprint is da:d0:a0:e1:d8:7a:23:8b:c7:d8:40:8c:b2:b2:9b:95.
Are you sure you want to continue connecting (yes/no)
在这种情况下,脚本将不起作用。
如何在一个 Expect 命令中包含两个 Expect 语句?

最佳答案

在这种情况下,您可以使用 exp_continue:

expect {
"Are you sure you want to continue connecting (yes/no)" {
send "yes\r"
exp_continue
}
"root@$LinuxMachine's password:" {
send "root123\r"
expect "[root@Client_FC12_172_85 ~]#"
send "ls\r"
interact
}
}

在上面,Expect 块等待是/否问题或密码提示。如果是后者,它将继续提供密码,等待提示,发送 ls 命令并返回控制权。

如果是前者,它会回答"is"并重复期望块,准备好找到密码提示(或者甚至是是/否问题,就此而言 - 不是你需要那个)。

我还将包含一些带有有意义消息的超时,以防某些期望选项与预期不匹配,但上述方法应该有效。

作为旁注,您不想在脚本中设置 root 密码...我建议使用 ssh key 身份验证。

关于expect - 在一个 Expect 脚本中处理多个语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20658618/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com