修改 Hermes Dashboard 的登录密码,不需要重启整个容器——改配置 + kill 进程即可,QQ 会话不断线。

背景

Hermes Agent 的 Dashboard(Web 管理界面)默认带 basic auth 登录。Dashboard 页面本身没有"改密码"功能,需要改配置文件。但很多人以为要重启容器才能生效——其实有更轻的方式。

方法

1. 改配置文件

编辑 Hermes 配置(config.yaml),找到 dashboard 的 basic_auth 配置:

dashboard:
  basic_auth:
    username: admin
    password_hash: "<scrypt 哈希>"   # 或明文 password: "xxx"

两种密码写法:

  • password_hash:scrypt 哈希(推荐,不存明文)
  • password:明文密码(简单但安全性低)

生成 password_hash(交互式输入,避免密码出现在命令行历史里):

# 容器部署的,先进入容器内再执行:
docker exec -it <容器名> bash
# 然后在容器内:
python3 -c "
from plugins.dashboard_auth.basic import hash_password
import getpass
pw = getpass.getpass('输入新密码: ')
print(hash_password(pw))
"

getpass 交互输入——密码不会显示在终端、不会进 shell history。 (如果容器里找不到 plugins 模块,说明需要在 Hermes 的虚拟环境里执行:/opt/hermes/.venv/bin/python3)

2. kill Dashboard 进程(热更新)

关键:不需要重启整个容器,只需要让 Dashboard 进程重启——Hermes 用 s6 进程管理器,杀掉后会自动拉起新进程并读取新配置:

kill <dashboard 进程 PID>
# s6 自动拉起新进程(几秒内)

3. 验证

  • 用新密码登录 Dashboard
  • 旧密码失效
  • QQ/Telegram 等其他通道不受影响,不需要重新连接

为什么可以这样

Hermes 容器内用 s6 监督进程——Dashboard 是独立服务,被杀后 s6 检测到会立即重启,重启时重新读取配置。所以:

改 config.yaml → kill dashboard 进程 → s6 自动拉起(读新配置)→ 生效

不需要:重启整个容器(会影响所有通道、耗时更长)。

注意

  • 修改前备份 config.yaml(cp config.yaml config.yaml.bak)
  • password_hash 用 scrypt 生成,别手写
  • 如果 dashboard 有多个实例/负载均衡,需要全部重启

相关经验

  • Hermes 配置热更新的通用思路:找 s6 管理的子服务,kill 对应进程即可热更新,不用重启容器
  • 同样的方法可用于其他配置变更(dashboard 主题、端口等)