Мне нужно подключить ноутбук Ubuntu 18.04 к двухступенчатой защищенной VPN. Чтобы заставить его работать, я должен написать в терминале 3 раза команду 'sudo systemctl restart openvpn':
- Первый раз, чтобы предоставить пароль 'sudo' (в консоли ничего не возвращается).
- Во второй раз запрашивается мое имя пользователя с помощью openvpn (в консоли запрашивается «Введите имя пользователя:».
- В третий раз запрашивается мой пароль с помощью openvpn («Введите пароль для входа:» запрашивается в консоли).
Чтобы автоматизировать процесс, я должен повторять каждый раз, когда подключаю свой ноутбук к Inte rnet, я написал следующий скрипт:
#!/usr/bin/expect -f
# shows usage to user
if {$argc!=2} {
send_user "In order to use this script, you must provide ans user and password:\n"
send_user "\tsudo $argv0 user password\n"
exit 1
}
# checks for root privileges
set whoami [exec id -u]
if {$whoami!=0} {
send_user "You must run this script with root privileges:\n"
send_user "\tsudo $argv0 user password\n"
exit 1
}
### Variables
## terminal wait time
#set timeout 1
#match_max 100000
# var to store the user
set user [lindex $argv 0]
# var to store the password
set password [lindex $argv 1]
### start system shell
spawn $env(SHELL)
### First command run: starts the VPN process of asking for the user and password
send -- "systemctl restart openvpn\r"
#expect "\r"
### Second command run: waits for username request
send -- "systemctl restart openvpn\r"
#expect "*?name:*"
expect -exact "Enter Auth Username: "
send "$user\r"
### Third command run: waits for password request
send -- "systemctl restart openvpn\r"
#expect "*?assword:*"
expect -exact "Enter Auth Password: "
send "$password\r"
expect eof
Но он не работает, так как ожидается , expect
не обеспечивает правильный ответ на systemctl restart openvpn
запросы. Например:
- Иногда работает правильно,
- иногда заполняет неправильный запрос (вводит имя пользователя при запросе пароля или наоборот)
Но когда я запускаю 3 раз скрипт, он правильно заполняет запросы, и я подключаюсь.
Любой совет будет полезен.
Заранее спасибо.