Bash Scripting - Como direcionar a saída para múltiplas entradas no OpenVPN?

Bash Scripting - Como direcionar a saída para múltiplas entradas no OpenVPN?

Então, estou tentando escrever um script para facilitar o processo de conexão ao servidor OpenVPN.

Então, quando escrevo:

openvpn --config vpnbook-pl226-udp53.ovpn

Ele me solicita que digite nome de usuário e senha:

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: 

Aqui eu quero que meu script envie automaticamente nome de usuário e senha para OpenVPN.

Tive as seguintes tentativas:

Tentativa 1:

{ echo "vpnbook"; echo "3vze4vd"; } | openvpn --config vpnbook-pl226-udp53.ovpn

Tentativa 2:

echo -e "vpnbook\n3vze4vd" | openvpn --config vpnbook-pl226-udp53.ovpn

Tentativa 3:

(echo $username; echo $password;) | openvpn --config vpnbook-pl226-udp53.ovpn

Mas nenhum deles está funcionando, estou recebendo a seguinte saída:

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

Então nada acontece.

Alguém pode me dar uma dica sobre isso?

Responder1

Você pode adicionar o nome de usuário e a senha a um arquivo seguro (que somente o proprietário possa ler). Procure o auth-user-passpasse na documentação do OpenVPN para obter detalhes ( man openvpn):

cat > /path/to/secret <<'X'
myusername
verysecret
X
chmod u=rw,go= /path/to/secret

Agora encontre a auth-user-passdiretiva em seu arquivo de configuração OpenVPN e estenda-a assim

auth-user-pass /path/to/secret

Responder2

Isto parece um trabalho paraesperar.

Para efeitos desta demonstração, escrevi um pequeno script para representar o comportamento do seu 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"

Aqui está um pequeno script expect que responde a estes prompts:

#! /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.

Esta é a aparência da saída:

[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: a solução da roiama é superior a esta por razões de segurança. Deixarei isso caso seja útil para alguém que está tentando descobrir como automatizar comandos interativos.

informação relacionada