期望脚本处理 RSA 指纹密钥
Expect script to handle RSA finger print keys
我正在努力使我的 expect 脚本更健壮,并且能够处理更多情况以更加自动化。目前我的脚本工作正常,但是,有时我会被要求将 RSA 密钥添加到 known_hosts,我希望它始终默认为是。我的服务器并不总是要求提供密钥,一旦添加,一段时间后它不会询问,直到您删除密钥或切换网关。在线查看后,我尝试在我的工作代码中添加这个(注释代码),然后添加它在密码输入屏幕上停止如果 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:
这就是 exp_continue
命令发挥作用的地方,本质上是在 expect
命令中创建一个 "loop":
spawn ssh $user@$host
expect {
"RSA key fingerprint" {send "yes\r"; exp_continue}
"assword:" {send "$pass\r"}
}
expect "#"
如果您看到 "RSA key" 模式,请回答 "yes" ,然后继续等待 "assword" 模式。如果在 "RSA key" 之前没有看到 "assword",没关系。
"assword" 模式的正文不包含 exp_continue
。发送密码后,封闭的 expect
命令将 return,下一个命令将等待您的提示。
请注意,我删除了 -re
选项:该模式中没有正则表达式特殊字符。
我正在努力使我的 expect 脚本更健壮,并且能够处理更多情况以更加自动化。目前我的脚本工作正常,但是,有时我会被要求将 RSA 密钥添加到 known_hosts,我希望它始终默认为是。我的服务器并不总是要求提供密钥,一旦添加,一段时间后它不会询问,直到您删除密钥或切换网关。在线查看后,我尝试在我的工作代码中添加这个(注释代码),然后添加它在密码输入屏幕上停止如果 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:
这就是 exp_continue
命令发挥作用的地方,本质上是在 expect
命令中创建一个 "loop":
spawn ssh $user@$host
expect {
"RSA key fingerprint" {send "yes\r"; exp_continue}
"assword:" {send "$pass\r"}
}
expect "#"
如果您看到 "RSA key" 模式,请回答 "yes" ,然后继续等待 "assword" 模式。如果在 "RSA key" 之前没有看到 "assword",没关系。
"assword" 模式的正文不包含 exp_continue
。发送密码后,封闭的 expect
命令将 return,下一个命令将等待您的提示。
请注意,我删除了 -re
选项:该模式中没有正则表达式特殊字符。