Вот один способ, которым Вы могли сделать это:
sed '1,/firstmatch/d;/secondmatch/,$d'
Объясненный: От первой строки до строки, соответствующей firstmatch, удалить. От строки, соответствующей secondmatch к последней строке, удалить.
хорошо я сумел получить туннельный пароль openvpn, введенный автоматически, и также сумел заставить туннель работать на начальной загрузке. надо надеяться, это помогает кому-то еще, кто пытается сделать то же самое - потому что его взятый меня более чем 20 часов для выяснения чего-то, что теперь выглядит довольно основным. код:
$ cat /etc/init.d/ZZcreate_ovpn_tun.sh
#!/bin/bash
# check if the tunnel already exists before trying to create it
proc=$(ps aux | grep openvpn | grep Userxxx)
if [ "$proc" == "" ]; then
echo "ovpn tunnel does not exist yet - will create it now"
else
echo "ovpn tunnel already exists ($proc)"
exit 0
fi
# load the config file into openvpn - has options to request the pkcs12 password through
# telnet
nohup openvpn /etc/init.d/ovpn/Userxxx.ovpn
sleep 1
# enter the password though a telnet session
/etc/init.d/ovpn/telnet_commands.sh
$ cat /etc/init.d/ovpn/telnet_commands.sh
#!/usr/bin/expect
spawn telnet 127.0.0.1 5558
expect ">PASSWORD:Need 'Private Key' password"
send "password 'Private Key' xxxxxxxxxxxxx\r"
expect "SUCCESS: 'Private Key' password entered, but not yet verified"
send "quit\r"
expect eof
$ cat Userxxx.ovpn
#OpenVPN Server conf
tls-client
client
dev tun
proto udp
tun-mtu 1400
remote xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.com.au 1194
pkcs12 /etc/init.d/ovpn/Userxxx.p12
cipher AES-256-CBC
comp-lzo
verb 3
ns-cert-type server
tls-remote xxxxxxxxxxxxxxxxxxxxxxxxxxx.com.au
management 127.0.0.1 5558
management-query-passwords
$ sudo update-rc.d ZZcreate_ovpn_tun.sh defaults
$ sudo shutdown -r 0
$ # wait for system to boot up again
$ ps aux | grep openvpn
root 5279 0.0 0.1 28224 3728 ? S 22:48 0:00 openvpn /etc/init.d/ovpn/Userxxx.ovpn
можно также хотеть перенаправить весь вывод в файл так, чтобы, если он перестал работать, Вы смогли видеть почему. я назвал файл ZZcreate_ovpn_tun.sh, чтобы удостовериться, что он пришелся последним изо всех сценариев в init.d dir идеально, я просто удостоверюсь, что он только работал на уровне приблизительно 6, но это хорошо работает на данный момент.
Я ожидал бы все, что это ищет, пароль для закрытого ключа. Попытайтесь использовать echo -e "xxxxxxxxx\r\n"
или echo "xxxxxxxx"
.
Можно хотеть попытаться использовать expect
ответить на запрос пароля. Некоторые программы пароля ищут пароль на a tty
введите устройство. Программа ожидает, обрабатывает это.
Можно быть более обеспеченным поиском rc.d
сценарий init для запуска туннеля. Это - нормальный метод для стартовых вещей при запуске.
telnet 127.0.0.1 5558
и затем введите пароль как так: password 'Private Key' xxxxxx
. это точно, что я имею в своем telnet_commands.sh сценарии, но он не работает. я изучил 'ожидать' программу, но я думаю, что это было бы излишество в этом случае, так как существует только когда-либо одна вещь, которую требуют в рамках сессии telnet.
– mulllhausen
12.03.2011, 04:33
Мой рабочий случай с маленьким исправлением:
nohup openvpn /etc/init.d/ovpn/Userxxx.ovpn &
/etc/init.d/ovpn/telnet_commands.sh
Просто требуемый, чтобы упомянуть, что (по крайней мере, на Ubuntu 12.04) существует - askpass/your/file аргумент в пользу openvpn, который читает пароль с закрытым ключом из файла.
askpass
опция можно использовать в .conf файле. (Полномочия набора к 600 для предотвращения отслеживания.)
– Paul Bissex
01.12.2014, 17:46