![Bash Scripting: ¿Cómo dirigir la salida a múltiples entradas en OpenVPN?](https://rvso.com/image/170270/Bash%20Scripting%3A%20%C2%BFC%C3%B3mo%20dirigir%20la%20salida%20a%20m%C3%BAltiples%20entradas%20en%20OpenVPN%3F.png)
Así que estoy intentando escribir un script para facilitar el proceso de conexión al servidor OpenVPN.
Entonces cuando escribo:
openvpn --config vpnbook-pl226-udp53.ovpn
Me pide que escriba nombre de usuario y contraseña:
Wed Apr 1 21:23:28 2020 OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4]
[EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
Wed Apr 1 21:23:28 2020 library versions: OpenSSL 1.1.1d 10 Sep 2019, LZO 2.10
Enter Auth Username:
Enter Auth Password:
Aquí quiero que mi script envíe automáticamente el nombre de usuario y la contraseña a OpenVPN.
Tuve los siguientes intentos:
Intento 1:
{ echo "vpnbook"; echo "3vze4vd"; } | openvpn --config vpnbook-pl226-udp53.ovpn
Intento 2:
echo -e "vpnbook\n3vze4vd" | openvpn --config vpnbook-pl226-udp53.ovpn
Intento 3:
(echo $username; echo $password;) | openvpn --config vpnbook-pl226-udp53.ovpn
Pero ninguno de ellos funciona, obtengo el siguiente resultado:
Wed Apr 1 21:38:14 2020 OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
Wed Apr 1 21:38:14 2020 library versions: OpenSSL 1.1.1d 10 Sep 2019, LZO 2.10
Entonces no pasa nada.
¿Alguien puede darme una pista sobre esto?
Respuesta1
Es posible que pueda agregar el nombre de usuario y la contraseña a un archivo seguro (uno que solo el propietario pueda leer). Busque el auth-user-pass
pase en su documentación de OpenVPN para obtener más detalles ( man openvpn
):
cat > /path/to/secret <<'X'
myusername
verysecret
X
chmod u=rw,go= /path/to/secret
Ahora busque la auth-user-pass
directiva en su archivo de configuración OpenVPN y extiéndala así
auth-user-pass /path/to/secret
Respuesta2
Esto parece un trabajo paraesperar.
Para los propósitos de esta demostración, escribí un breve script para imitar el comportamiento de su comando openvpn:
#! /usr/bin/env bash
echo "Wed Apr 1 21:23:28 2020 OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4]"
echo "[EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019"
echo "Wed Apr 1 21:23:28 2020 library versions: OpenSSL 1.1.1d 10 Sep 2019, LZO 2.10"
read -r -p 'Enter Auth Username: ' USERNAME
read -rs -p 'Enter Auth Password: ' PASSWORD
echo
echo "username was $USERNAME"
echo "password was $PASSWORD"
Aquí hay un breve script de espera que responde a estas indicaciones:
#! /usr/bin/env expect
spawn ./fakevpn --config vpnbook-pl226-udp53.ovpn
expect "Enter Auth Username: " { send Hello\r } # \r is the "return" character.
expect "Enter Auth Password: " { send World\r } # It simulates hitting the Enter key.
expect eof # This ensures expect won't exit until there's no more output.
Así es como se ve el resultado:
[gnubeard@mothership: ~/vpn]$ ./vpn_expect
spawn ./fakevpn --config vpnbook-pl226-udp53.ovpn
Wed Apr 1 21:23:28 2020 OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4]
[EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
Wed Apr 1 21:23:28 2020 library versions: OpenSSL 1.1.1d 10 Sep 2019, LZO 2.10
Enter Auth Username: Hello
Enter Auth Password:
username was Hello
password was World
Editar: la solución de roiama es superior a esta por razones de seguridad. Dejaré esto en caso de que sea útil para alguien que intenta descubrir cómo automatizar comandos interactivos.