OpenVPN on Linux: passing username and password in command line
Following @Fluffy answer (unfortunately I don't have enough reputation to comment)
There is a nice bash trick that can eliminate need for pass.txt file
Insead of
openvpn ... --auth-user-pass pass.txt
where pass.txt is
opvn_user
ovpn_pass
one can use
openvpn ... --auth-user-pass <(echo -e "opvn_user\novpn_pass")
please note the \n
usage between username and password
The problem with the suggested solutions is that all of them are based on a plain text password.
I came up with the following bash script to solve the problem:
VPN_USER="your user name"
VPN_PASSWORD="$(sudo kwallet-query -l secrets -r your_password)"
CONFIG_FILE=/tmp/your_vpn.ovpn
sudo bash -c 'openvpn --config '"$CONFIG_FILE"' --auth-user-pass <(echo -e "'"$VPN_USER"'\n'"$VPN_PASSWORD"'")'
It queries the password manager (kwallet) to get the password. It also allows you to reuse existing configuration in CONFIG_FILE
(just remove the --auth-user-pass
entry from it if any)
The previous answer didn't work for me (still asked for username and password), what did work was putting your credentials in a file (pass.txt), like this
[email protected]
password
and calling openvpn with --auth-user-pass pass.txt
.
source
Note that in some OpenVPN versions (e.g. OpenVPN 2.4.11) there is a bug where you have to first use --config
and then --auth-user-pass
or your auth file will be ignored without any warning.
So, here a complete example:
sudo openvpn --config /home/ipv/conf/ipvanish-CA-Toronto-tor-a09.ovpn --auth-user-pass pass.txt