我编写了一个小脚本来更改许多服务器的密码。它的语法是 expect - tcl 的扩展。它看起来很糟糕,但可以正常工作。
有个问题是,当我第一次登录一个服务器时,需要输入‘yes’来确认是否将该服务器添加到~/.ssh/know_hosts。这个问题困扰了我很久。有没有什么简单的方法可以解决这个问题?
谢谢,抱歉我的英语很糟糕。
proc passwd4mqm {ip_list} {
foreach Arg $ip_list {
set city [lindex $Arg 0]
set ip [lindex $Arg 1]
set user [lindex $Arg 2]
set passwd [lindex $Arg 3]
send_user "\n\n>>> $city-$ip \n"
spawn ssh $user@$ip
expect {
"yes" {
send "yes\r"
expect {
"password" {
send "$passwd\r"
expect {
"$user" {
send "passwd mqm\r"
expect {
"New UNIX password:" {
send "$passwd\r"
expect {
"Retype new UNIX password:" {
send "$passwd\r"}
}
}
}
send "exit\r"
}
}
}
}
}
"password" {
send "$passwd\r"
expect {
"$user" {
send "passwd mqm\r"
expect {
"New UNIX password:" {
send "$passwd\r"
expect {
"Retype new UNIX password:" {
send "$passwd\r"}
}
}
}
send "exit\r"
}
}
}
}
interact
}
}
答案1
也许你正在寻找类似exp_continue
expect {
"*yes/no*" { send "yes\r"; exp_continue }
"password:" {
.....
}
}