我正试图使我的expect脚本更加健壮,并能够处理更多的情况,使其更加自动化。目前我的脚本运行良好,但是,有时我会被要求将rsa密钥添加到已知的主机,我希望这一直默认为yes。我的服务器并不总是要求密钥,一旦添加,然后一段时间后,它不会要求,直到你删除密钥或切换网关。在网上查找后,我试图添加这个(评论代码)在我的工作代码,并在添加后,如果已经添加了rsa密钥,它会在密码输入屏幕暂停。
所以我的问题是,有没有办法处理这种情况,比如说如果已经添加了rsa,它就会跳转到密码行?

[user@gateway my_direcotry]$ cat loadItTest
#!/usr/bin/expect -f

set timeout 600
set user root
set host 1.1.1.1
set pass pass


spawn ssh $user@$host

#expect {
#    -re "RSA key fingerprint" {send "yes\r"}
#}

expect "assword:"
send "$pass\r"
expect "#"

样本输出:
[root@gateway my_direcotry]# loadItTest
spawn ssh [email protected]
[email protected]'s password:

最佳答案

这就是exp_continue命令发挥作用的地方,在expect命令中创建一个“循环”:

spawn ssh $user@$host
expect {
    "RSA key fingerprint" {send "yes\r"; exp_continue}
    "assword:" {send "$pass\r"}
}
expect "#"

如果您看到“rsa密钥”模式,请回答“是”,然后继续等待“assword”模式。如果你在“rsa密钥”之前看不到“assword”,那没关系。
“assword”模式的正文不包含exp_continue。发送密码后,将返回封闭的expect命令,下一个命令将得到提示。
注意我删除了-re选项:该模式中没有regex特殊字符。

关于linux - 期望脚本处理RSA指纹键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35299670/

10-15 01:14