Expect TCL 쉘 스크립트에서 비밀번호가 잘못된 경우 루프 종료

Expect TCL 쉘 스크립트에서 비밀번호가 잘못된 경우 루프 종료

SSH를 사용하여 서버 1에서 서버 2로 연결하도록 TCL에 코드 조각을 작성했습니다. 사용자가 서버 1과 서버 2 사이에 비밀번호 없는 통신을 설정했거나 비밀번호가 필요할 수 있습니다. 코드는 아래 세 가지 가능한 상황을 모두 처리해야 합니다.

  1. 서버 1과 서버 2 사이에 비밀번호 없는 로그인이 활성화된 경우
  2. 비밀번호 없는 로그인이 활성화되지 않고 비밀번호가 표시됩니다. 프롬프트
  3. 사용자가 잘못된 비밀번호를 입력하면 두 번째 비밀번호: 프롬프트가 나타나고 여기서 ctrl+c를 입력하고 종료합니다.

아래 코드를 찾아주세요

#!/usr/bin/expect -f
lassign $argv 1 2 
spawn ssh -o StrictHostKeyChecking=no $1@$2

expect {
      "*]#" { send -- "sleep 0\n" }  #Prompt when passwordless is active and user have logged in
      "Password: " {send -- "$2\n"   #Password prompt when no passwordless is active.
             exp_continue }
      "Password: " {send -- "^C" }   # Second Password Prompt when the wrong password is entered 
                                       in previous step. From here code should exit with a message
       }
 expect "*]#"                # After SSH is successful

두 번째 비밀번호를 처리할 수 없습니다. 잘못된 비밀번호를 묻는 메시지가 표시됩니다. 여기서 코드는 사용자에게 적절한 메시지와 함께 종료되어야 합니다. ./testssh.exp 사용자 이름 비밀번호 스크립트를 실행 중입니다.

답변1

아마도:

set count 0
expect {
    "Password:" {
        if {[incr count] == 2} {
            # this is the 2nd time, send Ctrl+C
            send -- \x3
            expect eof
            error "incorrect password"
        } else {
            send -- "$2\r"
            exp_continue
        }
    }
    "$prompt"
}
# successfully logged in.
send -- something 
...

관련 정보