You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用脚本删除ejabberd服务器指定虚拟主机的所有用户

解决ejabberd指定虚拟主机批量删除用户的问题

方法一:优化ejabberdctl命令,屏蔽无关日志

ejabberdctl的无关日志一般输出到标准错误流(stderr),直接将stderr重定向到空设备,就能只保留纯用户列表:

ejabberdctl registered_users example.com 2>/dev/null

在此基础上,结合管道过滤掉admin用户,再批量执行删除操作:

ejabberdctl registered_users example.com 2>/dev/null | grep -v "^admin$" | while read user; do
    ejabberdctl unregister "$user" example.com
done

这条命令会自动删除example.com虚拟主机下除admin外的所有用户。

方法二:使用ejabberd HTTP API实现

如果更倾向于API方式操作,先确保ejabberd配置文件中启用了ejabberd_http模块,并且配置了调用registered_users和unregister命令的权限。

1. 获取指定虚拟主机的用户列表

用curl调用API获取用户列表(替换your_auth_token、your-ejabberd-host为实际值):

curl -X GET -H "Authorization: Bearer your_auth_token" \
    "http://your-ejabberd-host:5280/api/registered_users?host=example.com"

返回结果为JSON格式的用户数组,示例:["admin", "user1", "user2"]

2. 过滤并批量删除用户

借助jq工具解析JSON,过滤掉admin后逐个调用删除API:

curl -X GET -H "Authorization: Bearer your_auth_token" \
    "http://your-ejabberd-host:5280/api/registered_users?host=example.com" | \
jq -r '.[] | select(. != "admin")' | while read user; do
    curl -X POST -H "Authorization: Bearer your_auth_token" \
        "http://your-ejabberd-host:5280/api/unregister" \
        -d "user=$user&host=example.com"
done

如果没有jq工具,也可以用其他JSON解析工具或手动处理返回字符串。

另外,使用API前需确认ejabberd的权限配置正确,比如在ejabberd.yml中添加类似配置:

commands_admin_access: configure
commands:
  - add_commands: [registered_users, unregister]
api_permissions:
  "api":
    who: all
    what: ["registered_users", "unregister"]

可根据实际安全需求调整权限范围,避免过度开放。

内容的提问来源于stack exchange,提问作者nick_j_white

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:20:36