前言
在 iStoreOS 或 OpenWRT 上使用 Docker 部署青龙面板(QingLong)时,我们偶尔会遇到忘记管理员密码的情况。传统的教程通常会让你去修改 auth.json 或者执行 ql admin 命令。
然而,在青龙面板 2.10+ 以后的版本中,这些方法往往会失效,原因是:
-
存储架构变更:配置由
.json文件转移到了database.sqlite数据库。 -
数据封装:用户名和密码被封装在数据库的 JSON 字符串字段中。
本文将记录如何在 iStoreOS 终端下,通过直接操作 SQLite 数据库成功重置密码。
环境背景
-
系统:iStoreOS (OpenWRT)
-
容器名称:
Qinglong(注意: 教程中使用的名称为Qinglong,请根据你实际创建容器时定义的名称进行替换) -
宿主机挂载路径:
/root/data(对应容器内/ql/data)
操作步骤
第一步:准备数据库工具
iStoreOS 终端默认可能未安装 SQLite 命令行工具,我们需要先手动安装:
Bash
opkg update && opkg install sqlite3-cli第二步:定位数据库文件
你需要确认青龙面板的数据挂载点。在 iStoreOS 的常规配置中,数据库通常位于宿主机的以下路径: /root/data/db/database.sqlite
提示:你可以通过
ls -lh /root/data/db/database.sqlite确认文件是否存在。
第三步:修改数据库重置密码
新版青龙将账号信息存储在 Auths 表的 info 字段内。我们需要使用 SQL 的 json_set 函数来精准覆盖密码。
执行以下命令,将密码强制修改为 admin123:
Bash
sqlite3 /root/data/db/database.sqlite "UPDATE Auths SET info = json_set(info, '$.password', 'admin123') WHERE type = 'authConfig';"第四步:清除登录尝试锁定(可选)
如果你因为多次尝试登录导致被系统暂时封禁,可以执行以下命令清理登录日志锁定:
Bash
sqlite3 /root/data/db/database.sqlite "DELETE FROM Auths WHERE type = 'loginLog';"第五步:重启容器使配置生效
修改数据库后,必须重启 Docker 容器以刷新程序缓存。
注意: 请确保将下方代码中的
Qinglong修改为你实际的容器名。
Bash
docker restart Qinglong核心要点总结
| 维度 | 旧版青龙 (v2.9 以前) | 新版青龙 (v2.10+) |
|---|---|---|
| 存储方式 | auth.json 配置文件 | database.sqlite 数据库 |
| 重置方式 | 删除文件或手动编辑 | 使用 SQLite 命令修改 info 字段 |
| 关键路径 | /ql/config/auth.json | /ql/data/db/database.sqlite |
注意事项
-
容器名称确认:本教程假定容器名为
Qinglong。如果你在安装时使用了默认的whyour-qinglong1或其他自定义名称,请在执行重启命令时手动修改。 -
备份建议:操作数据库前,建议先执行
cp命令备份一份原始database.sqlite。 -
安全提醒:使用
admin123成功登录后,请务必第一时间进入面板设置,修改为一个复杂的强密码。
感谢阅读!