Linux 上的 OpenVPN:在命令行中传递用户名和密码 [已关闭]

问题描述 投票:0回答:8

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

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

现在,我必须输入我的用户名,然后是我的密码。 如何将这两个参数作为一个命令传递,这样我只需使用一个命令,用户名/密码就会自动传递?

linux bash command echo
8个回答
137
投票

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

[email protected]
password

并使用

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

来源

请注意,在某些 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

40
投票

以下@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
用户名和密码之间的用法


21
投票

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

我想出了以下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
条目(如果有)

正如@Mesco 提到的,上面的命令失败了

bash: -c: line 1: unexpected EOF while looking for matching `"'

如果密码包含

"

我已将其更改为:

sudo bash -c 'openvpn --config '"$CONFIG_FILE"' --auth-user-pass <(echo -e "$VPN_USER"'\n''"$VPN_PASSWORD"')"

现在使用任何密码都应该可以工作


18
投票

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

vi pass.txt

添加此行,保存并退出

username  
password

现在进入 .ovpn 配置文件并进行编辑,应该有一行内容如下 身份验证用户密码

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

身份验证用户密码 pass.txt

好的,现在您应该能够通过执行 .ovpn 文件来验证 VPN 了

如果您需要执行 RDP 之类的操作,还有一种方法可以进行身份验证,而无需每次使用 #!/bin/bash 脚本输入密码。


7
投票

在 OpenVPN 2.5.0 上将

--auth-user-pass
作为命令行参数传递对我来说不起作用。但是在 .ovpn 文件中添加
auth-user-pass
就达到了这里的解释:https://forums.openvpn.net/viewtopic.php?t=11342


3
投票

对于那些在命令行中遇到

--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

在文件中的

my_auth_pass.txt
之后添加
auth-user-pass

auth-user-pass my_auth_pass.txt

关闭ovpn文件,然后

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

应该可以。

归功于florin27


2
投票

在我的例子中,变量是由秘密管理器注入的,所以我只是对 @ka3ak 的示例进行了以下更改,以适应在 ECS 内的 docker 容器中运行的 bash 脚本。

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

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

0
投票

我必须按如下方式修改@ka3ak的答案才能使其正常工作:

kwallet-query -f Passwords -r [entry_name] kdewallet
,

然后从 VPN_PASSWORD 行中删除 sudo,因为它给出了分段错误错误。我还必须安装 libqt5-dxcbplugin 包(opensuse tumbleweed)。然后由于脚本中有 --auth-user-pass ,我从 .ovpn 配置文件中删除了该行,没有任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.