Linux 上的 OpenVPN:在命令行中传递用户名和密码

OpenVPN on Linux: passing username and password in command line

我正在使用 IPVanish 在网上冲浪时使用代理;喜欢:

sudo openvpn --config /home/ipv/conf/ipvanish-CA-Toronto-tor-a09.ovpn

现在,我必须输入我的用户名,然后是我的密码。 我怎样才能将这两个参数作为一个命令传递,以便我只使用一个命令并且自动传递 username/password?

之前的答案对我不起作用(仍然要求输入用户名和密码),有效的方法是将您的凭据放入文件中 (pass.txt),就像这样

username@email.com
password

并使用 --auth-user-pass pass.txt 调用 openvpn。

source

请注意,在某些 OpenVPN 版本(例如 OpenVPN 2.4.11)中存在一个错误,您必须先使用 --config 然后再使用 --auth-user-pass 否则您的授权文件将被忽略而没有任何警告.

所以,这是一个完整的例子:

sudo openvpn --config /home/ipv/conf/ipvanish-CA-Toronto-tor-a09.ovpn --auth-user-pass pass.txt

关注 @Fluffy 回答(不幸的是我没有足够的声誉来发表评论)

有一个很好的 bash 技巧可以消除对 pass.txt 文件的需要

校内

openvpn ... --auth-user-pass pass.txt

其中 pass.txt 是

opvn_user
ovpn_pass

一个可以用

openvpn ... --auth-user-pass <(echo -e "opvn_user\novpn_pass")

请注意用户名和密码

之间的\n用法

我不是新来的,但这是我的第一个贡献

我是这样做的:(我是菜鸟,欢迎指教)

在我看来你有一个配置文件 .ovpn 需要配置,你需要创建一个包含用户名和密码的新文件,你可以这样做

vi pass.txt

添加这行,保存并退出

username  
password

现在进入 .ovpn 配置文件并进行编辑,应该有一行内容为 授权用户密码

添加您的用户名和密码文件

auth-user-pass pass.txt

好的,现在您应该能够通过执行 .ovpn 文件对 VPN 进行身份验证

如果您需要执行类似 RDP 之类的操作,还有一种无需每次都使用 #!/bin/bash 脚本输入密码即可进行身份验证的方法,如果您需要帮助,请告诉我:)

建议的解决方案的问题是它们都基于纯文本密码。

我想出了以下 bash 脚本来解决问题:

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"'")'

查询密码管理器(kwallet)获取密码。它还允许您重用 CONFIG_FILE 中的现有配置(如果有的话,只需从中删除 --auth-user-pass 条目)

将 --auth-user-pass 作为命令行参数传递对我在 OpenVPN 2.5.0 上不起作用。但是在 .ovpn 文件中添加 auth-user-pass 部分之前的技巧就如这里所解释的那样:https://forums.openvpn.net/viewtopic.php?t=11342

命令行中--auth-user-path遇到问题的小结:

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

在文件auth-user-pass后添加my_auth_pass.txt

auth-user-pass my_auth_pass.txt

关闭ovpn文件,然后

sudo openvpn ipvanish-CA-Toronto-tor-a09.ovpn 

应该可以。

感谢

因为变量是由 secrets manager 注入的,所以 @ka3ak 的回答非常有用。我只是做了一些小改动以适应在 docker 容器中运行的 bash 脚本。

$CONF= MyConfigFileName
$USERNAME=User1
$PASSWORD=UserUSer1

openvpn --config /scripts/$CONF-openvpn.ovpn --auth-user-pass <(echo -e $USERNAME"\n"$PASSWORD)