Скрипт Bash. Введите имя пользователя и пароль - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь написать скрипт, который вызывает другой.Затем следует ввести имя пользователя и пароль.К сожалению, spawn не вызывает мой файл скрипта.

Я создал оба сценария, а затем создал их с помощью chmod +x filename.sh, сделав его исполняемым.

vpn.sh

#! /usr/bin/expect

spawn ./startvpn.sh


#expect "[sudo] Passwort für niclas:"
#send "**********"

#expect "Enter Auth Username:"
#send '*************'

#expect "Enter Auth Password:"
#send "******"

startvpn.sh

#! /bin/bash

sudo openvpn /etc/openvpn/ovpn_udp/se250.nordvpn.com.udp.ovpn

План:

Я запускаю ./vpn на терминале, который затем запускает startvpn.Это устанавливает соединение с Openvpn.

Затем vpn.sh должен ввести пароль Sudo, а затем мое имя пользователя и пароль для NordVpn.

Как ни странно, startvpn никогда не запускается.

Я не получаю сообщение об ошибке.

Обновление:

Я обновил свой скрипт.Теперь он работает, за исключением того, что он не вводит пароль.

обновленная версия vpn.sh

#!/usr/bin/expect -f

spawn sudo openvpn /etc/openvpn/ovpn_udp/se250.nordvpn.com.udp.ovpn


expect "Passwort für niclas:"
send "******\r"

expect "Username:"
send "**************\r"

expect "Password:"
send "****\r"

Вывод на консоль:

niclas@niclas-Inspiron-7347:~$ expect vpn.sh 
spawn sudo openvpn /etc/openvpn/ovpn_udp/se250.nordvpn.com.udp.ovpn
[sudo] Passwort für niclas: 
Fri Jun 28 21:03:03 2019 OpenVPN 2.4.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on May 14 2019
Fri Jun 28 21:03:03 2019 library versions: OpenSSL 1.1.1  11 Sep 2018, LZO 2.08
Enter Auth Username: niclas.buerger@web.de
Enter Auth Password: niclas@niclas-Inspiron-7347:~$   

Если я наберу пароль обычно, он будет заполнен ******.Так что я действительно не знаю, почему это не работает.Команда такая же, как и с именем пользователя.

1 Ответ

0 голосов
/ 28 июня 2019
expect "[sudo] Passwort für niclas:"

Внутри "" кавычки, [] будет действовать как синтаксис подстановки команд tcl.

Вам нужно использовать строгое ожидание {}, например:

expect {[sudo] Passwort für niclas:}

Или кавычка[] например:

expect "\[sudo\] Passwort für niclas:"

Или просто используйте часть ожидаемой строки:

expect "Passwort für niclas:"

Или просто так:

expect "Passwort"
...