期望脚本处理RSA指纹键

时间:2016-02-09 18:39:24

标签: linux rsa expect

我正在努力使我的期望脚本更加强大,并能够处理更多自动化的情况。目前我的脚本工作正常,但是,有时我会被要求将RSA密钥添加到known_hosts,我希望它始终默认为yes。我的服务器并不总是要求输入密钥,一旦添加,一段时间后它就不会问,直到你删除密钥或切换gatways。在线查看后,我尝试在我的工作代码中添加此(注释代码),并在添加后,如果已经添加了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 root@1.1.1.1
root@1.1.1.1's password:

1 个答案:

答案 0 :(得分:4)

这是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选项:该模式中没有正则表达式特殊字符。