我怎样才能简化这个预期脚本?

我怎样才能简化这个预期脚本?

我编写了一个小脚本来更改许多服务器的密码。它的语法是 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:" { 
    ..... 
  }
}

相关内容