OpenVPN on Linux: passing username and password in command line
LinuxBashCommandEchoLinux Problem Overview
I am using IPVanish for using a proxy while surfing; like:
sudo openvpn --config /home/ipv/conf/ipvanish-CA-Toronto-tor-a09.ovpn
Now, I have to enter my username, after that my password. How Can I pass those two params right as one command, so that I just use one command and the username/password are being passed automatically?
Linux Solutions
Solution 1 - Linux
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
username@email.com
password
and calling openvpn with --auth-user-pass pass.txt
.
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
Solution 2 - Linux
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
Solution 3 - Linux
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)
Solution 4 - Linux
I'm not new here, but this is my first contribution
This is what I did: (I'm a noob, advices are welcomed)
Seems to me like you have a config file .ovpn with the configuration needed, you need to create a new file that contains the username and password, you can do it like this
vi pass.txt
Add this lines, save and exit
username
password
Now go the the .ovpn config file and edit, there should be a line that reads auth-user-pass
Add your username and password file
> auth-user-pass pass.txt
Ok so now you should be able to authenticate to the VPN just by executing your .ovpn file
If you need to do something like RDP there is also a way to authenticate without typing the password everytime using a #!/bin/bash script, let me know if you need help :)
Solution 5 - Linux
Passing --auth-user-pass as a command line argument did not work for me on OpenVPN 2.5.0. But adding auth-user-pass in .ovpn file before
Solution 6 - Linux
Summary for those who have a problem with --auth-user-path
in the command line :
cd /etc/openvpn
sudo bash -c "echo -e 'username\npasswd' > my_auth_pass.txt" # creating/editing the credentials
sudo chmod 600 my_auth_pass.txt # security to disallow reading from group/others
sudo vi ipvanish-CA-Toronto-tor-a09.ovpn
Add my_auth_pass.txt
after auth-user-pass
in the file:
auth-user-pass my_auth_pass.txt
Close the ovpn file, then
sudo openvpn ipvanish-CA-Toronto-tor-a09.ovpn
should work.
Credits to florin27.
Solution 7 - Linux
Because variables are injected by secrets manager, @ka3ak's answer was very useful. I just did small changes to adapt my bash script that runs within a docker container.
$CONF= MyConfigFileName
$USERNAME=User1
$PASSWORD=UserUSer1
openvpn --config /scripts/$CONF-openvpn.ovpn --auth-user-pass <(echo -e $USERNAME"\n"$PASSWORD)