Hermes ntfy 토큰 무효화 사건 — 원인 분석 및 복구 기록
초록
2026-08-21, Hermes가 EOS에게 전송한 메시지가 수신되지 않은 사건을 조사한 결과 Hermes의 ntfy 토큰이 서버에서 완전히 삭제된 상태임을 발견했다. .env에 저장된 구 토큰은 서버에 존재하지 않았고, hermes 계정에 등록된 토큰 자체가 0개였다. 새 토큰을 발급하고 .env를 갱신하여 복구 완료.
Hermes ntfy 토큰 무효화 사건 — 원인 분석 및 복구 기록
발생일: 2026-08-21
보고자: EOS
대상: Hermes ntfy 통신 채널
1. 사건 경위
사령관으로부터 "Hermes가 memory msg를 EOS에게 보냈다고 하는데 EOS가 못 받았다"는 보고를 접수했다. EOS가 수신하지 못한 원인을 조사하도록 지시받았다.
2. 조사 과정
2-1. ntfy roops-eos, roops-comm 폴링
roops-eos 토픽(EOS 전용 행동 채널)을 24시간 범위로 폴링한 결과 메시지 없음.
roops-comm 에서 Hermes 발신 메시지를 필터링한 결과 Hermes 발신 메시지 없음.
2-2. Redis EOS inbox 확인
docker exec roops-redis redis-cli -a $REDIS_PASS LRANGE roops:inbox:eos 0 -1
# (empty)
Redis inbox도 비어 있었다.
2-3. Hermes 토큰 유효성 검사
curl -H "Authorization: Bearer $NTFY_TOKEN_HERMES" \
"$NTFY_BASE/roops-comm/json?poll=1&since=10"
# → HTTP 401 Unauthorized
.env에 등록된 NTFY_TOKEN_HERMES가 401을 반환했다.
2-4. ntfy 서버 hermes 계정 확인
docker exec $(docker ps --filter name=ntfy -q) ntfy user list
# user hermes (role: user, tier: none)
# - read-write access to topic roops-*
docker exec $(docker ps --filter name=ntfy -q) ntfy token list hermes
# user hermes has no access tokens
hermes 계정은 존재하고 권한도 정상이나, 등록된 토큰이 0개였다.
3. 근본 원인
| 항목 | 상태 |
|---|---|
ntfy hermes 계정 |
존재, roops-* read-write 권한 정상 |
ntfy hermes 토큰 |
서버에 0개 (모두 삭제됨) |
.env NTFY_TOKEN_HERMES |
구 토큰 — 서버에 없어 항상 401 |
.env NTFY_HERMES_PASS |
미존재 |
| Redis inbox | 비어 있음 |
토큰이 서버에서 삭제된 정확한 시점과 원인은 ntfy 서버 감사 로그 부재로 특정 불가. .env는 갱신되지 않은 채 구 토큰만 남아있는 상태였다.
결론: Hermes는 현재 ntfy로 발신 자체가 불가능한 상태였다. EOS가 못 받은 것이 아니라 발신이 실패한 것.
4. 복구 조치
4-1. 신규 토큰 발급
docker exec $(docker ps --filter name=ntfy -q) ntfy token add hermes
# → 신규 토큰 발급 완료 (never expires)
4-2. .env 갱신
NTFY_TOKEN_HERMES를 신규 토큰으로 교체. 토큰 값은 보안상 .env 및 OOB 경로로만 공유.
4-3. 동작 확인
신규 토큰으로 roops-comm 폴링 → HTTP 200, 메시지 정상 수신 확인.
5. 재발 방지 제안
- ntfy 토큰 유효성 정기 점검: 세션 시작 시 또는 주기적으로 각 에이전트 토큰 유효성 확인 절차 추가
NTFY_HERMES_PASS.env 등록: 토큰 분실 시 Basic Auth 폴백 경로 확보- 발신 실패 즉시 보고: Hermes 세션에서 401 수신 시 사령관에게 OOB 보고하는 절차 수립
- 보고서 작성 시 토큰 값 미기재: 복구 기록 논문에도 실제 토큰 값 노출 금지
- ntfy 서버 토큰 감사 로그: 토큰 생성/삭제 이벤트 로깅 추가 검토
6. 타임라인
| 시각 (KST) | 이벤트 |
|---|---|
| 2026-08-21 | 사령관 보고 접수 |
| 2026-08-21 | ntfy roops-eos, roops-comm, Redis inbox 전수 확인 → 메시지 없음 |
| 2026-08-21 | Hermes 토큰 401 확인 |
| 2026-08-21 | ntfy 서버 hermes 계정 토큰 0개 확인 |
| 2026-08-21 | 신규 토큰 발급 + .env 갱신 |
| 2026-08-21 | 동작 확인 완료 |
| 2026-08-21 | v2 정정 — 논문 본문 내 토큰 값 삭제 |
통신 채널이 조용할 때, 그것이 평화인지 단절인지 구분하는 것이 운영자의 몫이다. — EOS
