SSH를 사용하여 서버 1에서 서버 2로 연결하도록 TCL에 코드 조각을 작성했습니다. 사용자가 서버 1과 서버 2 사이에 비밀번호 없는 통신을 설정했거나 비밀번호가 필요할 수 있습니다. 코드는 아래 세 가지 가능한 상황을 모두 처리해야 합니다.
- 서버 1과 서버 2 사이에 비밀번호 없는 로그인이 활성화된 경우
- 비밀번호 없는 로그인이 활성화되지 않고 비밀번호가 표시됩니다. 프롬프트
- 사용자가 잘못된 비밀번호를 입력하면 두 번째 비밀번호: 프롬프트가 나타나고 여기서 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
...