我是期待脚本的新手。
我在linux机器上为ssh编写了一个expect脚本,我在不同的linux机器上遇到sshing问题。我已经复制了脚本。
!/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
期望在第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命令中有两个期望语句。
提前致谢!!!
答案 0 :(得分:8)
在这种情况下你可以使用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命令并给予控制权。如果是前者,它将回答“是”并重复预期阻止,准备找到密码的提示(或者甚至是/是否问题再次,就此而言 - 不是你需要它)。
如果某些期望选项与预期不匹配,我还会包含一些带有意义消息的超时,但上述情况应该有效。
作为旁注,您不希望在脚本中设置root密码...我建议使用ssh密钥身份验证。
让我知道它是怎么回事。
答案 1 :(得分:0)
我们称之为“长时间登录”,有ssh选项不检查主机密钥:
send -- "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no username@host\n"
expect {
"Password" {
send -- "$passwd\n"
}
调用expect的bash脚本的一部分设置密码:
echo -n "Enter LDAP password: "
read -s passwd
echo