我最近更新并重新格式化了我的 /etc/hosts 文件,并希望运行每个系统(大约 1000 个)以刷新我的 known_hosts 文件。我正在考虑使用期望脚本向 RSA 指纹问题发送“是”。很简单。但是,我知道其中一些系统对我来说是全新的,而且我的密码尚未设置。这产生了两种可能性:
“是”被发送到 RSA 指纹问题,我已登录服务器。然后,我需要发送一个退出以关闭连接,然后再移动到下一个主机。或者...
“是”被发送到 RSA 指纹问题,并提示我更新我的密码,从当前密码开始,然后输入两次新密码。密码更新到下一个主机后,连接将自动关闭。
我想我对期望中的“if/else”的概念有一个基本的了解,但是我不完全理解如何嵌套它们,如果有更好的方法,或者我一开始就完全脱离了基础.
这就是我现在所拥有的:
set file1 [open [lindex $argv 0] r]
set pw1 [exec cat /home/user/.pw1.txt]
set pw2 [exec cat /home/user/.pw2.txt]
while {[gets $file1 host] != -1} {
puts $host
spawn -noecho "ssh $host"
expect {
"continue connecting"{
send "yes\r"
expect {
"current" {
send $pw2\r
} "New password" {
send $pw1\r
} "Retype new password" {
send $pw1\r
}
}
expect "msnyder"
send "exit\r"
}
interact
}
file1 变量是运行脚本的主机列表。
我知道它不准确,因为它在第 22 行出错。但是,我不知道需要修复什么。