ok, eu consegui inserir a senha do túnel openvpn automaticamente e também consegui que o túnel fosse executado na inicialização. Espero que isso ajude alguém que está tentando fazer a mesma coisa - porque me levou mais de 20 horas para descobrir algo que agora parece bastante básico. código:
$ 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
você também pode querer redirecionar toda a saída para um arquivo para que, se ele falhar, você possa ver o motivo. Eu chamei o arquivo ZZcreate_ovpn_tun.sh para ter certeza que ele foi executado por último de todos os scripts no diretório init.d. Idealmente, eu teria apenas a certeza de que ele só correu no nível 6 ou mais, mas isso funciona bem por enquanto.