Я пытаюсь написать сценарий, который предоставит учетные данные для VPN с одним предупреждением, где VPN требует, чтобы я предоставил OTP.
Это мой сценарий:
#! /usr/bin/expect
set vpn [ lindex $argv 0]
set group [ lindex $argv 1]
set user [ lindex $argv 2]
set secret [ lindex $argv 3]
log_user 2
spawn nmcli con up $vpn --ask
expect {
"GROUP:" {
send "$group\r"
exp_continue
}
"Username:" {
send "$user\r"
exp_continue
}
Password: {
send_user "\nProvide RSA OTP:"
expect_user -re ":(.*)\r"
set otp $expect_out(0,string) <--------- Error!!!
set pass "$secret$otp"
send "$pass\r"
exp_continue
}
"Connection successfully activated" {
send_user "Connected to VPN\r"
}
"Login failed" {
send_user "Login failed\r"
exp_continue
}
"already active" {
send_user "Already connected to VPN\r"
}
}
exit
Я включил стрелка к тому, что я думаю, является источником проблемы, потому что, когда я запускаю этот скрипт, он выглядит так, как ожидающий_ содержит Password:
. Учитывая то, что я прочитал на странице руководства, я представил, что буфер очищается каждый раз, когда выполняется новое совпадение, и поэтому он содержит строку, совпадающую в последнем предложении ожидаемого (в данном случае expect_user -re ":(.*)\r"
), однако, похоже, я ошибаюсь. Я не видел никаких заметок, в которых говорилось, что доступ к содержимому Ожидайте_пользователя нужно использовать с помощью другой функции, как interact
, поэтому я не уверен, где мой пароль go?
Спасибо