中转网关支持批量导入用户密钥,批量开通账号脚本
中转网关在处理大量用户接入时,手动逐个添加密钥和开通账号非常低效。
本文要解决的是:如何通过一个批量导入脚本,把用户密钥一次性写入中转网关,并自动开通对应的访问账号。
文中命令基于 Linux 服务器和常见中转网关(如 New-API、one-api 类管理面板)编写,接口字段以你实际部署的版本为准。
先确认两件事:网关类型和密钥文件格式
不同中转网关的管理接口略有差异,但批量导入的核心思路一致:先准备含用户信息和密钥的 CSV 文件,再调用管理 API 或直接写入数据库。
动手前先确认三点:
- 中转网关管理面板是否提供“批量导入”入口。有入口就直接上传 CSV,无需写脚本。
- 管理 API 是否开放。一般可在面板的“令牌管理”或“系统设置”里找到 API 地址和访问密钥。
- 密钥字段的命名规则。常见字段为
user_email、user_name、quota、expire_time、key。
如果面板没有现成导入功能,才需要脚本方案。
编写批量导入脚本:一条命令开通一个账号
下面以 Bash + curl 为例,读取 CSV 文件,逐行调用管理 API 创建用户并导入密钥。
脚本会做三件事:创建用户、生成令牌、写入密钥。
先准备 users.csv,内容参考如下:
username,email,quota,expire_time,secret_key
zhangsan,zhangsan@example.com,100,2026-12-31,sk-test-001-xxxx
lisi,lisi@example.com,200,2026-12-31,sk-test-002-xxxx
保存脚本 batch_import.sh:
#!/bin/bash
ADMIN_URL="https://你的网关域名"
ADMIN_TOKEN="你的管理API令牌"
while IFS=',' read -r username email quota expire key; do
# 跳过表头
if [ "$username" = "username" ]; then
continue
fi
# 1. 创建用户
curl -s -X POST "${ADMIN_URL}/api/user/register" \
-H "Authorization: Bearer ${ADMIN_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"username\":\"${username}\",\"email\":\"${email}\",\"quota\":${quota},\"expire_time\":\"${expire}\"}"
# 2. 为用户生成访问令牌并绑定密钥
curl -s -X POST "${ADMIN_URL}/api/token/add" \
-H "Authorization: Bearer ${ADMIN_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"username\":\"${username}\",\"secret_key\":\"${key}\"}"
echo "已处理:${username}"
done < users.csv
给脚本加执行权限并运行:
chmod +x batch_import.sh
./batch_import.sh
如果你用的中转网关基于 New-API,它的创建用户和令牌接口路径通常是 /api/user/ 和 /api/token/。
具体参数以你部署版本的接口文档为准。
执行后如何验证是否成功
不要只看脚本不报错就结束,要落到数据验证。
- 到管理后台的“用户列表”查看新增用户数量和配额是否正确。
- 在“令牌管理”中确认每个用户都生成了一条密钥,且状态为“已启用”。
- 用其中一个密钥调用网关的
v1/models接口测试:
curl -s https://你的网关域名/v1/models -H "Authorization: Bearer sk-test-001-xxxx"
返回模型列表说明密钥有效。
如果返回 401,检查密钥是否复制完整,或者用户是否被禁用。
还可以写一个简单的统计命令,看看 CSV 里有多少行、后台实际创建了多少用户:
# 统计 CSV 行数(去掉表头)
tail -n +2 users.csv | wc -l
# 查看脚本输出和后台手动核对
容易踩的四个坑
- CSV 文件编码错误。在 Windows 上编辑的 CSV 可能是 GBK 编码,导致中文用户名乱码。用
iconv -f GBK -t UTF-8 users.csv > users_utf8.csv转换后再跑。 - 密钥格式不对。中转网关的密钥通常以
sk-开头,且长度有限制。如果面板提示密钥非法,先手动创建一个密钥复制到 CSV 中对比。 - 接口字段名不匹配。不同版本字段可能是
user_name而不是username,可能没有quota而用group。建议先用单条数据测试接口,确认无误再全量执行。 - 重复导入产生垃圾数据。脚本没有做幂等判断,重复运行会创建同名用户。可以在脚本开头先检查用户名是否存在,或使用管理 API 中的更新接口。
从手动到批量:脚本只是第一步
批量导入用户密钥和开通账号,本质是把重复操作自动化。
执行完脚本后,建议把脚本和 CSV 模板保存到服务器固定目录,下次开通时替换内容即可。
如果用户量很大,可以进一步加循环延迟,避免请求过快触发网关限流:
sleep 1 # 每处理一个用户等待 1 秒
如果你正在处理中转网关批量导入用户密钥、批量开通账号这类需求,建议先按本文步骤用 2-3 条测试数据跑通流程,再导入全量数据。
遇到异常时优先看接口返回的 JSON 错误信息,并对照后台实际数据,不要盲目重试。