在 Expect TCL shell 脚本中密码错误时退出循环

在 Expect TCL shell 脚本中密码错误时退出循环

我在 TCL 中编写了一个代码片段,期望使用 ssh 从服务器 1 连接到服务器 2。用户可能已经在服务器 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 
...

相关内容