Dashboard-Auth: Hermes-eigene Auth nicht mehr Pflicht, Caddy reicht

Dashboard bindet seit dem Caddy-Umbau nur noch auf 127.0.0.1 -- Hermes'
Auth-Gate engagiert sich laut eigener Fehlermeldung NUR bei einem
0.0.0.0-Bind, greift also gar nicht mehr. HERMES_DASHBOARD_PASSWORD_HASH
ist damit optional statt Pflicht (kein docker-compose-Abbruch mehr bei
leerem Wert), der dashboard: basic_auth-Block in config.yaml.example ist
standardmaessig auskommentiert. Caddy (TLS + eigene Basic-Auth) bleibt
die einzige im Normalbetrieb noetige Auth-Schicht. README/.env.example
entsprechend entschlackt -- Hash-Erzeugen + Dollarzeichen-Escaping nur
noch als Fallback dokumentiert, falls der Bind mal wieder auf 0.0.0.0
wandert.
This commit is contained in:
ARIA
2026-07-19 22:15:26 +00:00
parent 68ca43e5ac
commit b1423ffb6e
4 changed files with 73 additions and 110 deletions
+21 -72
View File
@@ -83,75 +83,24 @@ aussen — kein anderer Rechner kommt mehr direkt ran.
beim Config-Laden aus den Container-Env-Vars expandiert, die kommen aus
Deiner `.env`. Kein manuelles Ausfuellen noetig.
4. **Dashboard-Auth einrichten** (Pflicht seit 19.07.2026 — `hermes-agent-dashboard`
laeuft mit `--host 0.0.0.0` und Hermes verweigert diesen Bind hart, wenn
kein Auth-Provider registriert ist: `Refusing to bind dashboard to
0.0.0.0 — the auth gate engages on non-loopback binds, but no auth
providers are registered`. Ohne diesen Schritt kommt der Dashboard-
Container beim naechsten Schritt gar nicht hoch):
```bash
# HERMES_DASHBOARD_USER in .env ist Klartext, HERMES_DASHBOARD_PASSWORD_HASH
# ist NIEMALS das Klartext-Passwort, sondern der Hash daraus. Erzeugen kannst
# Du den erst NACHDEM Schritt 5 unten (docker compose up -d) mindestens
# hermes-agent hochgefahren hat -- gegen "hermes-agent", NICHT
# "hermes-agent-dashboard" (der braucht den Hash schon zum Start, Henne-Ei):
docker exec -it hermes-agent python -c \
"from plugins.dashboard_auth.basic import hash_password; print(hash_password('DEIN-PASSWORT'))"
```
**ACHTUNG DOLLARZEICHEN-FALLE:** der Hash hat das Format
`pbkdf2:sha256:<n>$<salt>$<hash>` — zwei rohe `$`-Zeichen drin. Docker
Compose interpretiert `$xyz` in `.env`-Werten selbst als Variablen-
Referenz und ersetzt nicht aufloesbare Teile stillschweigend durch
Leerstring (sichtbar als `WARN The "xyz" variable is not set` beim
`docker-compose up`). Ohne Escaping kommt im Container ein
verstuemmelter Hash an und das Dashboard bleibt bei "no auth providers
are registered" haengen, obwohl alles "richtig" eingetragen aussieht.
**Jedes `$` im Hash durch `$$` ersetzen**, bevor Du ihn in `.env`
eintraegst (z.B. `260000$abc$def` → `260000$$abc$$def`). Anfuehrungszeichen
um den Wert helfen dabei NICHT — Compose expandiert `$` in `.env`-Werten
unabhaengig davon ob sie gequotet sind.
4. **Dashboard-Auth: NICHT mehr noetig, ueberspringen.** (Historie: war
zwischenzeitlich Pflicht, solange `hermes-agent-dashboard` mit `--host
0.0.0.0` lief — Hermes verweigert diesen Bind hart ohne registrierten
Auth-Provider: `Refusing to bind dashboard to 0.0.0.0 — the auth gate
engages on non-loopback binds, but no auth providers are registered`.
Seit Schritt 5 unten (Caddy) bindet das Dashboard aber nur noch auf
`127.0.0.1` — Hermes' Auth-Gate engagiert sich laut eigener Fehlermeldung
NUR bei einem 0.0.0.0-Bind, hier greift's also gar nicht. Caddy macht die
eigentliche Absicherung nach aussen. `HERMES_DASHBOARD_USER`/
`_PASSWORD_HASH` in `.env` koennen leer bleiben, kein Hash-Erzeugen mehr
noetig.)
Am einfachsten den Hash direkt per `sed` in der Zeile escapen, statt ihn
von Hand nochmal abzutippen (verdoppelt NUR die `$` in genau dieser einen
Zeile):
```bash
sed -i '/^HERMES_DASHBOARD_PASSWORD_HASH=/ s/\$/$$/g' .env
```
Zur Kontrolle, ob noch unverdoppelte `$` uebrig sind (sollte leer sein):
```bash
grep -o '\$[^$]' .env
```
Output (den escapeten Hash, nicht das Passwort) in `.env` bei
`HERMES_DASHBOARD_PASSWORD_HASH` eintragen, `HERMES_DASHBOARD_USER`
nach Belieben setzen (Default `admin`).
Der `dashboard.basic_auth`-Block dazu liegt schon fertig in
`hermes-agent-config/config.yaml.example` (Platzhalter, die Hermes selbst
aus den Container-Env-Vars expandiert — kein manuelles Ausfuellen noetig,
siehe Schritt 3).
**WICHTIG, wenn Du Schritt 3 schon VOR dem 19.07.2026 gemacht hast:**
Schritt 3 kopiert `config.yaml.example` nur EINMALIG nach
`hermes-data/agent-home/config.yaml` — kein automatischer Re-Sync danach.
Der `dashboard:`-Block wurde erst nachtraeglich in die `.example`-Datei
ergaenzt, landet also NICHT von selbst in einer bereits existierenden
`config.yaml`. Ohne ihn bleibt Hermes bei "no auth providers are
registered" haengen, egal wie sauber `.env` escaped ist (weil Hermes den
Block ja gar nicht sieht). Pruefen:
```bash
grep -A3 '^dashboard:' hermes-data/agent-home/config.yaml
```
Kommt nichts zurueck → Block manuell anhaengen:
```bash
cat >> hermes-data/agent-home/config.yaml <<'EOF'
dashboard:
basic_auth:
username: "${HERMES_DASHBOARD_USER}"
password_hash: "${HERMES_DASHBOARD_PASSWORD_HASH}"
EOF
```
Danach neu hochziehen: `docker compose up -d --build hermes-agent-dashboard`
Nur falls Du den Dashboard-Bind mal wieder direkt auf `0.0.0.0` stellst
(z.B. um ohne Caddy zu testen), brauchst Du das wieder — dann in
`hermes-agent-config/config.yaml.example` (bzw. Deiner echten
`config.yaml`) den auskommentierten `dashboard:`-Block reaktivieren und
`HERMES_DASHBOARD_PASSWORD_HASH` in `.env` setzen (Anleitung dazu direkt
im Kommentar über dem Block, inkl. Dollarzeichen-Escaping-Falle).
5. **TLS-Reverse-Proxy (Caddy) einrichten — macht Port 443 von aussen
erreichbar, Dashboard bleibt intern auf `127.0.0.1`:**
@@ -200,10 +149,10 @@ aussen — kein anderer Rechner kommt mehr direkt ran.
Baut beim ersten Mal das Hermes-Image aus `hermes-agent-src` (dauert ein
paar Minuten), startet dann `hermes-proxy`, `hermes-gateway`,
`hermes-agent` (Gateway/Messaging-Prozess), `hermes-agent-dashboard` und
`caddy`. Falls `HERMES_DASHBOARD_PASSWORD_HASH` oder `CADDY_BASIC_AUTH_HASH`
noch leer sind: der jeweilige Service bricht beim Start ab, die anderen
laufen trotzdem — Werte nachtragen, dann
`docker compose up -d hermes-agent-dashboard caddy`.
`caddy`. Falls `CADDY_BASIC_AUTH_HASH` noch leer ist: `caddy` bricht beim
Start ab, die anderen laufen trotzdem — Wert nachtragen (Schritt 5b), dann
`docker compose up -d caddy`. `HERMES_DASHBOARD_PASSWORD_HASH` darf leer
bleiben (siehe Schritt 4).
7. **Einmalig Claude-CLI-Login** (oeffnet Browser-OAuth mit deiner Claude-Max-Subscription):
```bash