私のサーバーのパスワードを変更したいです。
サーバーでパスワードを変更するときに許可する必要があるパスワードは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