我正在尝试使用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
)上运行它时,它可以正常运行并正确进行身份验证。我已经在我的Web服务器上设置了我的php脚本,以便每次调用它时都会生成一个日志,因此我知道请求是否成功达到。但是,当OpenVPN调用脚本时,curl请求将无法发送(客户端身份验证失败)。我的猜测是,由于某种原因,OpenVPN没有使用cURL的权限?如何授予OpenVPN使用curl的权限?
注意:我尝试将exit 0
放在我的bash脚本之上,它成功验证了用户身份并连接到VPN。
答案 0 :(得分: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'
)" ]
因为测试会处理掉它,所以无需退出并返回明确的返回代码?