配置
登录与安全
面板有两种登录方式:应急密码,以及可选的 GitHub 单点登录。只用应急密码同样完整可用。
配了单点登录也要保留应急密码:GitHub 不可达或 OAuth App 配错时,它是唯一的入口。
应急密码
首次启动时 hub 生成一个 24 位的随机密码。一键脚本装完直接显示在终端里;其他部署方式打印在 hub 的标准输出:
# Docker
docker logs monitor | grep Emergency
# 自己写的 systemd 单元
journalctl -u <单元名> | grep Emergencybash在安全页修改,最短 12 位,以 argon2id 哈希存储。改密码会注销所有登录会话,包括正开着的实时推送连接:那条连接里带着各节点的 token,不断开的话,它会比被注销的会话活得更久。
重置应急密码
忘了或没记下来,就重置一个。旧密码立即失效,所有会话被注销,hub 不用重启:
# 一键脚本
sudo ./install-hub.sh --reset-password
# Docker
docker exec monitor /monitor-hub --db /data/monitor.db --reset-password
# 手动部署,数据库路径换成自己的
monitor-hub --db /opt/monitor/data/monitor.db --reset-passwordbash新密码只打印在执行命令的终端里。数据库文件必须已经存在,路径写错时直接报错,不会新建空库。提示
unknown argument 说明 hub 版本太旧,先升级。
GitHub 单点登录
1. 在 GitHub 建一个 OAuth App
Settings → Developer settings → OAuth Apps → New OAuth App
| 字段 | 填什么 |
|---|---|
| Application name | 随意,例如 monitor |
| Homepage URL | https://hub.example.com |
| Authorization callback URL | https://hub.example.com/api/auth/github/callback |
回调路径必须是 /api/auth/github/callback。填错时 GitHub 授权照常成功,浏览器也回到了站点,但就是没有登录上。
2. 填进面板
在安全页填 Client ID 和 Client Secret,再填允许登录的 GitHub 用户名,多个用逗号分隔。
用户名列表留空表示拒绝所有人,不是放行所有人。
Client Secret 保存后读不回来,面板只显示「已设置」。授权只申请 read:user。
会话与限流
- 登录会话 14 天过期。安全页列出所有会话,可以逐个注销
- 改密码、重置密码、导入备份都会注销全部会话
- 同一来源地址 15 分钟内密码输错 5 次即锁定,登录成功清零。反代要透传
X-Forwarded-For,否则所有访客共用一个计数,见反向代理
登录不通时
登录页会显示失败原因:
| 登录页的提示 | 含义 |
|---|---|
| 没有设置允许登录的 GitHub 用户 | 用户名列表是空的,空 = 拒绝所有人 |
| GitHub 用户 X 不在允许登录的名单里 | 这个用户名不在列表里 |
| 在 GitHub 上取消了授权 | 在 GitHub 授权页上点了拒绝 |
| GitHub 拒绝了这次登录,原因见 hub 日志 | GitHub 返回了其他错误,例如 OAuth App 被停用 |
| 登录已过期,请从登录页重新开始 | 不是从登录页发起的,或者 state cookie 已过期(10 分钟) |
| GitHub 没有发放令牌,检查 Client Secret 是否正确后重新登录 | Client ID 或 Client Secret 不对 |
| hub 连不上 GitHub,检查它的网络后重新登录 | hub 访问不了 github.com 或 api.github.com |
| GitHub 的回复无法识别,稍后重新登录 | GitHub 回了内容,但不是预期的格式,多半是临时故障 |
| GitHub 没有返回用户信息(HTTP 状态码),重新登录再试 | 读取 GitHub 用户名时被拒,例如令牌失效或请求被限流 |
| hub 内部出错,详细原因见 hub 日志 | hub 自己出了错,例如写数据库失败 |
hub 日志里另外记着 GitHub 的原始回复和用户名列表。任何 GitHub 账号都能走完授权看到登录页的提示,所以这两样只写进日志:
# 一键脚本
journalctl -u monitor-hub -f | grep sign-in
# Docker
docker logs -f monitor 2>&1 | grep sign-inbash日志里一条都没有,就是回调路径填错了:请求没有进到 hub 的任何处理逻辑。未匹配的 /api/ 路径返回 404
而不是页面,所以这种错误会直接显示出来。