本文目录导读:

- 重要安全提示
- 基于 OpenVPN(使用 easy-rsa 或管理命令行)
- 基于 WireGuard(使用 wg set 或自动生成配置文件)
- 基于 SoftEther(使用 vpncmd 脚本)
- 通用方法:通过SSH循环执行
- 总结选择
批量添加VPN用户通常需要通过SSH远程执行命令或读取用户列表文件来完成,具体方法取决于你使用的VPN服务软件(如OpenVPN、WireGuard、StrongSwan、SoftEther等),以下是一些常见场景的脚本示例(假设你已经拥有管理员权限和相应的VPN服务配置文件)。
重要安全提示
- 使用强密码:脚本中应随机生成或读取预设的强密码。
- 访问控制:确保脚本文件权限为600(仅管理员可读写),避免密码泄露。
- 备份配置:批量操作前务必备份现有的VPN配置文件和用户数据库。
基于 OpenVPN(使用 easy-rsa 或管理命令行)
OpenVPN通常使用证书认证,用户添加意味着生成客户端证书和密钥。
示例脚本 (bash):
#!/bin/bash
# 配置环境
EASYRSA_DIR="/etc/openvpn/easy-rsa"
CLIENT_DIR="/etc/openvpn/clients"
USER_LIST="users.txt" # 每行一个用户名
# 导入环境变量
source $EASYRSA_DIR/vars
# 读取用户列表
while IFS= read -r username; do
# 跳过空行
[ -z "$username" ] && continue
# 生成证书(不包含密码保护的密钥方便自动部署,生产环境建议使用 --days 和密码)
cd $EASYRSA_DIR
./easyrsa --batch --req-cn="$username" gen-req "$username" nopass
./easyrsa --batch --req-cn="$username" sign-req client "$username" nopass
# 创建客户端配置文件(假设模板 client-common.txt 已存在)
$EASYRSA_DIR/easyrsa build-client-full "$username" nopass
# 生成 .ovpn 文件
mkdir -p $CLIENT_DIR/$username
cp /etc/openvpn/client-common.txt $CLIENT_DIR/$username/$username.ovpn
cat $EASYRSA_DIR/pki/issued/${username}.crt >> $CLIENT_DIR/$username/$username.ovpn
cat $EASYRSA_DIR/pki/private/${username}.key >> $CLIENT_DIR/$username/$username.ovpn
echo "" >> $CLIENT_DIR/$username/$username.ovpn
echo "用户 $username 已添加,配置文件位于 $CLIENT_DIR/$username/$username.ovpn"
done < "$USER_LIST"
用户列表文件 users.txt 示例:
user1
user2
user3
基于 WireGuard(使用 wg set 或自动生成配置文件)
WireGuard需要为每个用户生成密钥对和独立的配置文件。
示例脚本 (bash):
#!/bin/bash
WG_CONF_DIR="/etc/wireguard"
SERVER_PUB_KEY=$(cat $WG_CONF_DIR/server_public.key)
USERS_FILE="users.txt"
OUTPUT_DIR="/path/to/client_configs"
# 读取用户列表
while IFS= read -r username; do
[ -z "$username" ] && continue
# 生成密钥对
wg genkey | tee $WG_CONF_DIR/${username}_private.key | wg pubkey > $WG_CONF_DIR/${username}_public.key
# 分配IP(需自行管理IP池,此处示例为10.0.0.x)
IP_NUMBER=$(( $(wc -l < $USERS_FILE) + 10 )) # 简单顺序分配
CLIENT_IP="10.0.0.$IP_NUMBER"
SERVER_ENDPOINT="你的服务器公网IP:51820"
# 生成客户端配置
cat > $OUTPUT_DIR/$username.conf <<EOF
[Interface]
PrivateKey = $(cat $WG_CONF_DIR/${username}_private.key)
Address = $CLIENT_IP/24
DNS = 8.8.8.8
[Peer]
PublicKey = $SERVER_PUB_KEY
Endpoint = $SERVER_ENDPOINT
AllowedIPs = 0.0.0.0/0
EOF
# 添加用户到服务器配置
echo -e "\n# $username\n[Peer]\nPublicKey = $(cat $WG_CONF_DIR/${username}_public.key)\nAllowedIPs = $CLIENT_IP/32" >> $WG_CONF_DIR/wg0.conf
echo "用户 $username 已添加,配置文件:$OUTPUT_DIR/$username.conf"
done < "$USERS_FILE"
# 重载WireGuard
systemctl restart wg-quick@wg0
注意:需要预先创建好服务器公钥文件 server_public.key,并管理好IP分配自动化。
基于 SoftEther(使用 vpncmd 脚本)
SoftEther支持通过 vpncmd 命令行批量添加用户。
示例脚本 (bash):
#!/bin/bash
HUB_NAME="VPN"
USER_FILE="users.txt"
PASSWORD_FILE="passwords.txt" # 若为简单方式,可使用同一文件
# 假设目录包含 vpncmd
VPNADMIN="/usr/local/vpnserver/vpncmd"
# 循环添加用户
while IFS= read -r user; do
[ -z "$user" ] && continue
# 随机生成8位密码(演示用,生产需更复杂)
PASS=$(openssl rand -base64 6 | tr -d '=' | head -c 8)
echo "添加用户: $user, 密码: $PASS"
$VPNADMIN localhost /SERVER /CMD Hub "$HUB_NAME" UserCreate "$user" /GROUP:none /REALNAME:none /NOTE:"Auto created"
$VPNADMIN localhost /SERVER /CMD Hub "$HUB_NAME" UserPasswordSet "$user" /PASSWORD:"$PASS"
# 记录密码到日志
echo "$user:$PASS" >> created_users.log
done < "$USER_FILE"
echo "用户添加完成,密码已记录到 created_users.log (请立即安全删除)"
通用方法:通过SSH循环执行
如果VPN服务运行在远程服务器,你可以使用本地脚本 + SSH密钥认证批量操作。
示例脚本 (bash):
#!/bin/bash
SERVER="your-vpn-server-ip"
SSH_KEY="/path/to/private_key"
USER_LIST="remote_users.txt"
# 注意:需要将VPN相关脚本复制到远程服务器
while IFS= read -r user; do
ssh -i $SSH_KEY root@$SERVER "cd /opt/vpn-add-script && ./add_vpn_user.sh $user"
# 传入单个用户给远程脚本处理
done < "$USER_LIST"
总结选择
- 如果使用证书认证(如OpenVPN),推荐使用
easy-rsa或openssl脚本。 - 如果使用密钥对认证(如WireGuard),直接生成密钥并追加配置文件。
- 如果使用用户名/密码认证(如SoftEther/PPTP/L2TP),直接调用管理命令。
建议先手动测试一次单个用户的创建流程,确保无误后再编写批量脚本,如果需要考虑高并发或错误处理(如重试、失败日志),可以在脚本中加入 trap 和重定向错误输出。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播