如何编写一个“期望”脚本来检查提供的密码是否与多个可能的密码之一匹配?

如何编写一个“期望”脚本来检查提供的密码是否与多个可能的密码之一匹配?

我想更改我的服务器上的密码。

在服务器上更改密码时应接受四种可能的密码。

为了实现这一目标,我想编写一个“期望”脚本,该脚本登录到我的服务器并执行某些操作。但我不知道设备正在使用哪个密码,但我知道它是四个可能的密码之一。

因此,我的脚本需要依次尝试所有四个密码。这意味着如果第一个密码失败,脚本应尝试第二个密码。如果再次失败,则应尝试第三次。如果失败,则应尝试第四个密码。

这是我到目前为止的代码:

spawn telnet my_host
expect UserName {send admin\r}
expect PassWord [one of array passwords\r]

{if auth ok}
    do something
{else}
    try another password

expect -re #
send "logout\r"
expect eof

你能帮助我实现上述目标吗?

答案1

也许是这样的:

spawn telnet my_host

expect UserName 
send "admin\r"

set passwords [list foo bar baz]
set connected false
foreach pw $passwords {
    expect PassWord
    send -- "$pw\r"
    # change the "invalid password" pattern to whatever you need it to be.
    expect {
        "invalid password" {continue}
        -re "#" {
            set connected true
            break
        }
    }
}

if {! $connected} {
    error "no password succeeded"
}

send "logout\r"
expect eof

相关内容