Назад | Перейти на главную страницу

Как я могу упростить этот сценарий ожидания?

Я сделал небольшой скрипт для изменения пароля многих серверов. Его синтаксис ожидаемый - расширение 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
    }
}

Возможно вы ищете что-то вроде exp_continue

expect {
  "*yes/no*" { send "yes\r"; exp_continue }
  "password:" { 
    ..... 
  }
}