OpenVPN Access Server 常用操作指令(附shell脚本方法)
这篇技术笔记将介绍如何使用 sacli 命令进行常见的 OpenVPN Access Server 管理操作,包括用户管理、网络授权、MAC 地址管理、禁用用户以及重置用户的 TOTP MFA 码。
1. 创建用户
要创建一个新用户:
./sacli --user <用户名> --new_pass <密码> SetLocalPassword
./sacli --user <用户名> --key "conn_group" --value <组名> UserPropPut
./sacli --user <用户名> --key "prop_autologin" --value <true/false> UserPropPut
- <用户名>:新用户的用户名。
- <密码>:用户的密码。
- <组名>:用户所属的组(默认可以是
tecsun)。 - <true/false>:是否启用自动登录。
2. 删除用户
删除用户及其所有配置:
./sacli --user <用户名> UserPropDelAll
- <用户名>:要删除的用户名。
3. 授权用户网络
为用户添加网络访问权限:
./sacli --user <用户名> --key "access_to.<规则序号>" --value "+NAT:<网络地址>" UserPropPut
- <用户名>:需要授权的用户名。
- <规则序号>:网络规则的序号(如
0)。 - <网络地址>:如
192.168.1.0/24。
4. 删除用户网络
删除用户的网络访问权限:
./sacli --user <用户名> --key "access_to.<规则序号>" UserPropDel
- <用户名>:需要修改的用户名。
- <规则序号>:要删除的规则序号。
5. 重置用户 MAC
重置用户的主 MAC 地址:
./sacli --user <用户名> --key "pvt_hw_addr" UserPropDel
- <用户名>:需要重置 MAC 的用户名。
6. 添加用户辅助 MAC
为用户添加辅助 MAC 地址:
./sacli --user <用户名> --key "pvt_hw_addr2" --value <MAC地址> UserPropPut
- <用户名>:需要添加辅助 MAC 的用户名。
- <MAC地址>:辅助 MAC 地址(如
ef:cd:ba:03:02:01)。
7. 禁用用户
禁用用户并断开其所有连接:
./sacli --user <用户名> RevokeUser
./sacli --user <用户名> DisconnectUser
- <用户名>:需要禁用的用户名。
8. 重置用户 TOTP MFA 码
重置用户的 TOTP MFA 码:
./sacli --user <用户名> TotpRegen
- <用户名>:需要重置 TOTP MFA 的用户名。
执行此命令后,用户需要重新配置他们的 TOTP 应用程序(如 Google Authenticator)来生成新的验证码。
通过这些命令,您可以有效地管理 OpenVPN Access Server 的用户和网络配置。
快捷脚本
#!/bin/bash
SACLI="/usr/local/openvpn_as/scripts/sacli"
# 菜单函数
function menu() {
echo "OpenVPN Access Server 管理脚本"
echo "1. 创建用户"
echo "2. 删除用户"
echo "3. 授权用户网络"
echo "4. 删除用户网络"
echo "5. 重置用户 MAC"
echo "6. 添加用户辅助 MAC"
echo "7. 禁用用户"
echo "0. 退出"
read -p "请输入选项编号: " choice
}
function reload_service() {
echo "正在重载 OpenVPN 配置..."
$SACLI start
if [ $? -eq 0 ]; then
echo "服务重载成功!新的配置已生效。"
else
echo "服务重载失败,请检查错误日志!"
fi
}
# 显示当前所有组
function display_groups() {
echo "当前可用组:"
$SACLI UserPropGet | grep -oP '(?<=conn_group": ")[^"]+' | sort | uniq
}
# 创建用户
function create_user() {
read -p "请输入用户名: " username
read -s -p "请输入密码: " password
echo
# 显示当前所有组
display_groups
read -p "请输入用户所属组(默认为 tecsun): " group
group=${group:-tecsun} # 如果未输入组名,默认加入 tecsun 组
read -p "是否设置自动登录 (yes/no): " autologin
autologin_value="false"
if [[ $autologin == "yes" ]]; then
autologin_value="true"
fi
$SACLI --user "$username" --new_pass "$password" SetLocalPassword
$SACLI --user "$username" --key "conn_group" --value "$group" UserPropPut
$SACLI --user "$username" --key "prop_autologin" --value "$autologin_value" UserPropPut
echo "用户 $username 已创建并配置完成(组: $group)。"
reload_service
# 输出模板信息
echo -e "\n用户信息如下:"
echo "浏览器访问:ovpn.e-tecsun.com"
echo "用户名:$username"
echo "密码:$password"
echo "然后直接点download下载,下载直接打开安装并拨号即可"
}
# 删除用户
function delete_user() {
read -p "请输入要删除的用户名: " username
$SACLI --user "$username" UserPropDelAll
echo "用户 $username 已删除。"
reload_service
}
# 授权用户网络
function authorize_user_network() {
read -p "请输入用户名: " username
echo "当前用户网络规则:"
$SACLI --user "$username" UserPropGet | grep -A 10 "$username"
read -p "请输入要添加的网络地址 (如 192.168.1.0/24): " network_address
read -p "请输入规则序号 (如 0): " rule_index
rule_value="+NAT:$network_address"
$SACLI --user "$username" --key "access_to.$rule_index" --value "$rule_value" UserPropPut
echo "已为用户 $username 添加网络规则 $rule_value (序号 $rule_index)。"
reload_service
}
# 删除用户网络
function delete_user_network() {
read -p "请输入用户名: " username
echo "当前用户网络规则:"
$SACLI --user "$username" UserPropGet | grep -A 10 "$username"
read -p "请输入要删除的规则序号 (如 0): " rule_index
$SACLI --user "$username" --key "access_to.$rule_index" UserPropDel
echo "已删除用户 $username 的网络规则 (序号 $rule_index)。"
reload_service
}
# 重置用户 MAC
function reset_user_mac() {
read -p "请输入用户名: " username
$SACLI --user "$username" --key "pvt_hw_addr" UserPropDel
echo "用户 $username 的主 MAC 已重置。"
}
# 添加用户辅助 MAC
function add_user_aux_mac() {
read -p "请输入用户名: " username
read -p "请输入辅助 MAC 地址 (如 ef:cd:ba:03:02:01): " mac_address
$SACLI --user "$username" --key "pvt_hw_addr2" --value "$mac_address" UserPropPut
echo "已为用户 $username 添加辅助 MAC 地址 $mac_address。"
}
# 禁用用户
function disable_user() {
read -p "请输入要禁用的用户名: " username
$SACLI --user "$username" RevokeUser
$SACLI --user "$username" DisconnectUser
echo "用户 $username 已禁用。"
}
# 主循环
while true; do
menu
case $choice in
1) create_user ;;
2) delete_user ;;
3) authorize_user_network ;;
4) delete_user_network ;;
5) reset_user_mac ;;
6) add_user_aux_mac ;;
7) disable_user ;;
0) echo "退出脚本。"; exit 0 ;;
*) echo "无效选项,请重新输入。";;
esac
done