本文目录导读:

- 基于 OpenVPN 的批量删除(使用
easy-rsa或配置文件) - 基于 WireGuard 的批量删除
- 基于 SoftEther VPN 的批量删除(通过 vpncmd)
- 基于数据库的批量删除(如 FreeRADIUS、MySQL)
- 通用安全注意事项
- 批量删除用户脚本模板(通用)
要批量删除VPN用户,具体方法取决于你使用的VPN服务器软件(如OpenVPN、WireGuard、SoftEther、IPSec等)以及用户管理方式(如通过配置文件、数据库或LDAP),以下是一些常见场景的脚本示例和步骤:
基于 OpenVPN 的批量删除(使用 easy-rsa 或配置文件)
如果用户是通过 easy-rsa 管理的证书,或者通过配置文件(如 ccd 或 ipp.txt)控制,可以编写脚本来批量操作。
吊销证书(推荐)
使用 easy-rsa 吊销单个证书:
./easyrsa revoke <username>
批量吊销(假设用户列表在 users.txt 中):
#!/bin/bash
while IFS= read -r user; do
cd /path/to/easy-rsa
./easyrsa revoke "$user" <<< "yes"
done < users.txt
删除客户端配置文件
如果用户通过 .ovpn 文件连接,且服务器通过 ccd 目录控制:
#!/bin/bash
for user in $(cat user_list.txt); do
rm -f /etc/openvpn/ccd/$user
echo "Deleted config for $user"
done
基于 WireGuard 的批量删除
WireGuard 的用户通常以 [Peer] 块形式存在配置文件中,批量删除需要编辑配置文件。
脚本示例(删除多个 Peer)
假设用户公钥列表在 keys_to_delete.txt 中:
#!/bin/bash
config_file="/etc/wireguard/wg0.conf"
backup_file="$config_file.bak"
cp "$config_file" "$backup_file"
while IFS= read -r pubkey; do
# 删除对应 Peer 块(从 [Peer] 到下一行空行或文件结尾)
sed -i "/\[Peer\]/,/^$/ { /$pubkey/,/^$/d }" "$config_file"
echo "Removed peer with key: $pubkey"
done < keys_to_delete.txt
systemctl restart wg-quick@wg0
基于 SoftEther VPN 的批量删除(通过 vpncmd)
SoftEther 提供命令行工具 vpncmd,批量删除用户:
#!/bin/bash
server="localhost"
hub="VPNHUB"
password="your_password"
while IFS= read -r user; do
./vpncmd localhost /SERVER /PASSWORD:$password /HUB:$hub \
UserDelete "$user" /NOPASS
echo "Deleted user: $user"
done < user_list.txt
基于数据库的批量删除(如 FreeRADIUS、MySQL)
如果用户存储在数据库中(MySQL):
#!/bin/bash
mysql -u root -p -e "
USE radius_db;
DELETE FROM radcheck WHERE username IN ('user1','user2','user3');
"
或从文件读取:
while IFS= read -r user; do
mysql -u root -p -e "DELETE FROM radcheck WHERE username='$user';"
done < users.txt
通用安全注意事项
- 备份:执行前备份配置文件或数据库。
- 验证用户列表:确保文件格式正确,排除空行或错误用户名。
- 测试模式:先使用
echo模拟操作,确认无误后再执行实际删除。 - 权限:脚本可能需要 root 权限运行(如
sudo ./delete_users.sh)。
批量删除用户脚本模板(通用)
#!/bin/bash
# 批量删除 VPN 用户脚本
# 用法: ./delete_vpn_users.sh user_list.txt
LIST_FILE="$1"
if [[ ! -f "$LIST_FILE" ]]; then
echo "Usage: $0 <user_list_file>"
exit 1
fi
echo "Starting deletion of VPN users..."
while IFS= read -r username; do
# 去除空格
username=$(echo "$username" | tr -d '[:space:]')
if [[ -z "$username" ]]; then
continue
fi
echo "Processing: $username"
# 在这里替换为实际的删除命令
# 删除 OpenVPN 证书
# cd /etc/openvpn/easy-rsa && ./easyrsa revoke "$username" <<< "yes"
# 或者删除 WireGuard peer
# sed -i "/\[Peer\]/,/^$/ { /$username/,/^$/d }" /etc/wireguard/wg0.conf
done < "$LIST_FILE"
echo "Batch deletion complete."
- 如果你使用 OpenVPN,推荐使用
easy-rsa revoke吊销证书。 - WireGuard 需编辑配置文件并重启服务。
- SoftEther 通过
vpncmd命令行工具。 - 数据库 方式直接操作 SQL 语句。
根据你的实际 VPN 服务类型选择对应方法,并始终先测试再正式执行。