提供されたパスワードが可能な多くのパスワードの1つと一致することを確認するために「予想」スクリプトを作成するにはどうすればよいですか?

提供されたパスワードが可能な多くのパスワードの1つと一致することを確認するために「予想」スクリプトを作成するにはどうすればよいですか?

私のサーバーのパスワードを変更したいです。

サーバーでパスワードを変更するときに許可する必要があるパスワードは4つあります。

これを達成するために、私のサーバーにログインして特定のタスクを実行する「expect」スクリプトを作成したいと思います。しかし、デバイスがどのパスワードを使用しているかはわかりませんが、可能なパスワードの4つのうちの1つであることはわかっています。

したがって、私のスクリプトは4つのパスワードをすべて順番に試す必要があります。これは、最初のパスワードが失敗した場合、スクリプトが2番目のパスワードを試す必要があることを意味します。もう一度失敗した場合は、3回目を試してください。失敗した場合は、4番目のパスワードを試してください。

これは私のコードです。

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

関連情報