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