Как я могу упростить этот сценарий ожидания?
Я сделал небольшой скрипт для изменения пароля многих серверов. Его синтаксис является ожидаемым - расширение tcl. Это выглядит так плохо, но может работать нормально.
Одна проблема заключается в том, что при первом входе на сервер мне нужно ввести "да", чтобы подтвердить добавление этого сервера в ~/.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:" {
.....
}
}