Skip to content

Linux | OpenVPN 配置用户名密码认证

约 528 字大约 2 分钟

Linux

2021-04-30

本教程为 OpenVPN 配置基于用户名和密码的客户端认证方式,适用于服务端和客户端均为 Linux 系统的环境。


步骤 1:创建用户认证脚本 checkpsw.sh

OpenVPN 需要使用一个脚本来验证用户名和密码。我们可以从官方源下载这个脚本:

# 下载认证脚本
wget "http://openvpn.se/files/other/checkpsw.sh" -O /etc/openvpn/checkpsw.sh

# 添加执行权限
chmod 755 /etc/openvpn/checkpsw.sh

步骤 2:配置用户名和密码文件

该文件中每一行包含一个用户名和对应的密码,用空格分隔:

echo "jerry passwd1" > /etc/openvpn/psw-file

你可以根据需要添加多个用户,每个用户占一行。


步骤 3:修改 OpenVPN 服务端配置文件

server.conf 的末尾添加以下内容,启用脚本认证机制:

# 配置 OpenVPN 服务端配置文件路径
file="/etc/openvpn/server.conf"

cat <<EOF >> $file
script-security 3
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env    # 指定用户认证脚本
username-as-common-name
verify-client-cert none
EOF

解释:

  • script-security 3:允许调用外部脚本。
  • auth-user-pass-verify:指定认证脚本路径。
  • username-as-common-name:将用户名作为 common name。
  • verify-client-cert none:关闭客户端证书验证,仅使用用户名密码。

步骤 4:修改客户端配置文件

我们为用户 jerry 生成客户端配置,并修改其 .ovpn 文件,注释掉证书相关配置,并启用用户名密码输入:

# 创建客户端配置(假设你已有该脚本)
sh /etc/openvpn/client/add_ovpn_user.sh jerry

# 客户端配置文件路径
clientCnf="/etc/openvpn/client/keys/jerry/jerry.ovpn"

# 注释掉证书文件配置
sed -i 's/cert client.crt/;cert client.crt/g' $clientCnf
sed -i 's/key client.key/;key client.key/g' $clientCnf

# 添加用户名密码登录支持
echo "auth-user-pass" >> $clientCnf

完成!

现在,客户端连接时会弹出用户名和密码输入提示,服务端通过 checkpsw.sh 脚本与 psw-file 文件进行验证,无需使用客户端证书登录。

可以根据实际需要扩展用户列表、增强脚本安全性或接入外部认证系统。

更新日志

2025/6/15 11:14
查看所有更新日志
  • 13186-initial