【问题标题】:Openvpn failing to send cURL request through user based scriptOpenvpn 无法通过基于用户的脚本发送 cURL 请求
【发布时间】:2020-04-18 14:01:29
【问题描述】:

我正在尝试使用 bash 脚本验证我的 OpenVPN 客户端(使用用户名和密码)。这是我的服务器端配置的一部分:

client-to-client
username-as-common-name
client-cert-not-required
script-security 3
auth-user-pass-verify '/etc/openvpn/script/auth.sh' via-env

这是我的 bash 脚本:

#!/bin/bash
SECRET='mysecret'
RESPONSE=$(sudo /usr/bin/curl https://myvpn.com/somedir/auth.php -d"username=$1&password=$2&secret=$SECRET" --silent)
if [ "$RESPONSE" = "y" ]; then
    exit 0
else
    exit 1
fi

当我在命令行 (./auth.sh) 上运行它时,它运行良好并且验证正确。我已经在我的网络服务器上设置了我的 php 脚本,这样每次调用它都会生成一个日志,所以我知道请求是否成功到达。但是,当 OpenVPN 调用脚本时,curl 请求发送失败(客户端身份验证失败)。我的猜测是,出于某种原因,OpenVPN 没有使用 cURL 的权限?如何授予 OpenVPN 使用 curl 的权限?

注意:我尝试将exit 0 放在我的 bash 脚本之上,它成功地验证了用户并连接到 VPN。

【问题讨论】:

  • 为什么用sudo调用curl?
  • 我最初不是,但无论如何我都尝试过,以防 sudo 允许 openvpn 调用 curl。

标签: bash curl openvpn


【解决方案1】:

如果你不需要 sudo,你可以这样做:

#!/usr/bin/env bash

SECRET='mysecret'
[ 'Y' = "$(
  /usr/bin/curl \
    --data "username=$1&password=$2&secret=$SECRET" \
    --silent \
    'https://myvpn.com/somedir/auth.php'
)" ]

不需要以显式返回码退出,因为测试会处理它?

【讨论】:

  • 非常感谢!请求现在发送。但是,没有收到来自 POST 请求的任何数据。我正在将 $_POST['username'] 和 $_POST['password'] 写入 txt 文件,它会创建 txt 文件,但它是空的。是否有一个原因?另外,你能告诉我为什么我的代码没有发送请求,但你的发送了吗?谢谢!
  • 嘿,所以 POST 数据发送,但不是用户名和密码。 OpenVPN 似乎没有正确初始化脚本。我会调查这个!感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-06-21
  • 2017-04-23
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多