제공된 비밀번호가 가능한 많은 비밀번호 중 하나와 일치하는지 확인하기 위해 "예상" 스크립트를 어떻게 작성합니까?

제공된 비밀번호가 가능한 많은 비밀번호 중 하나와 일치하는지 확인하기 위해 "예상" 스크립트를 어떻게 작성합니까?

내 서버의 비밀번호를 변경하고 싶습니다.

서버에서 비밀번호를 변경할 때 허용해야 하는 비밀번호는 4가지가 있습니다.

이를 달성하기 위해 내 서버에 로그인하고 특정 작업을 수행하는 "expect" 스크립트를 작성하고 싶습니다. 하지만 기기가 어떤 비밀번호를 사용하고 있는지는 모르지만 가능한 비밀번호 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

관련 정보