【问题标题】:OpenVPN on Linux: passing username and password in command lineLinux 上的 OpenVPN:在命令行中传递用户名和密码
【发布时间】:2016-12-16 14:28:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: linux bash command echo


    【解决方案1】:

    之前的答案对我不起作用(仍然要求输入用户名和密码),起作用的是将您的凭据放入文件(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
    

    【讨论】:

    • 这对我不起作用:Options error: Unrecognized option or missing or extra parameter(s) in [CMD-LINE]:1: auth-user-pass (2.4.4)
    • openvpn3 不支持这个参数
    • 这些不是很容易受到攻击的解决方案吗?
    • 我遇到了问题,但我通过在我的 .ovpn 文件中包含 auth-user-pass <absolute_path_to_text_file> 行解决了这个问题(您可以使用基本的文本编辑器进行编辑)。
    • 需要 --config 出现在 --auth-user-pass 之前的错误仍然存​​在(刚刚在我的 Suse Leap 15.2 上出现过)......谢谢你提到它,这让我恢复了理智:-)
    【解决方案2】:

    关注@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用法

    【讨论】:

    • 是否也可以使用base64 -d encode_data_here 而不是这个(echo..)
    • 这对我不起作用:Options error: Unrecognized option or missing or extra parameter(s) in [CMD-LINE]:1: auth-user-pass (2.4.4)
    • 您可以使用任何在
    • 好主意,但是用sudo openvpn ...'/dev/fd/63': No such file or directory (errno=2)调用时不起作用
    • sudo bash -c 'openvpn ... &lt;(echo -e "....")' 工作。
    【解决方案3】:

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

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

    【讨论】:

    • 有没有类似的东西让windows不需要这个文件?
    • @My1 不确定,因为我只使用 Linux
    • 我得到的密码中有“字符”:bash: -c: line 0: unexpected EOF while looking for matching `"'
    【解决方案4】:

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

    这就是我所做的:(我是菜鸟,欢迎提出建议)

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

    vi pass.txt
    

    添加此行,保存并退出

    username  
    password
    

    现在转到 .ovpn 配置文件并编辑,应该有一行显示 验证用户密码

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

    auth-user-pass pass.txt

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

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

    【讨论】:

    • 这是 2021 年最终对我有用的方法。我使用的是树莓派。
    【解决方案5】:

    将 --auth-user-pass 作为命令行参数在 OpenVPN 2.5.0 上对我不起作用。但是在部分之前的 .ovpn 文件中添加 auth-user-pass 就可以做到这一点,如下所述:https://forums.openvpn.net/viewtopic.php?t=11342

    【讨论】:

      【解决方案6】:

      给那些在命令行中有--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 
      

      应该可以。

      感谢florin27

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-14
        • 2016-08-28
        • 2012-12-30
        • 2015-06-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多