From 11341c8521676a167b41026a038f3b9e9ca0ccf7 Mon Sep 17 00:00:00 2001 From: ARIA Date: Sun, 19 Jul 2026 21:37:03 +0000 Subject: [PATCH] Dashboard-Auth: Hermes verweigert 0.0.0.0-Bind ohne registrierten Auth-Provider Hermes' eigenes Auth-Gate blockt den Container-Start hart, wenn --host 0.0.0.0 gesetzt ist aber keine Auth konfiguriert wurde. Basic-Auth-Block in config.yaml.example ergaenzt, dashboard-Service bekommt HERMES_DASHBOARD_USER + HERMES_DASHBOARD_PASSWORD_HASH als Pflicht-Env, .env.example dokumentiert die Hash-Erzeugung ueber Hermes' eingebautes plugins.dashboard_auth.basic. --- .env.example | 11 +++++++++++ docker-compose.yml | 16 +++++++++++----- hermes-agent-config/config.yaml.example | 20 ++++++++++++++++++++ 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/.env.example b/.env.example index 5be2805..8b80ce6 100644 --- a/.env.example +++ b/.env.example @@ -20,6 +20,17 @@ HERMES_GATEWAY_PORT=8447 HERMES_UID=10000 HERMES_GID=10000 +# Pflicht seit 19.07.2026, SOBALD hermes-agent-dashboard auf 0.0.0.0 bindet: +# Hermes verweigert sonst den Start hart ("no auth providers are registered"). +# HERMES_DASHBOARD_USER ist Klartext (frei waehlbar), HERMES_DASHBOARD_PASSWORD_HASH +# ist NIEMALS das Klartext-Passwort, sondern der Hash daraus. Erzeugen (einmalig, +# im laufenden Dashboard-Container): +# docker exec -it hermes-agent-dashboard python -c \ +# "from plugins.dashboard_auth.basic import hash_password; print(hash_password('DEIN-PASSWORT'))" +# Den Output (nicht das Passwort selbst!) hier eintragen. +HERMES_DASHBOARD_USER=admin +HERMES_DASHBOARD_PASSWORD_HASH= + # Optional: NUR setzen wenn Du Hermes' EIGENEN OpenAI-kompatiblen API-Server # aktivierst (siehe API_SERVER_HOST/API_SERVER_KEY-Kommentar im # hermes-agent-Service in docker-compose.yml) — z.B. um einen mobilen Client diff --git a/docker-compose.yml b/docker-compose.yml index 89457ad..cddcd78 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -187,11 +187,17 @@ services: environment: - HERMES_UID=${HERMES_UID:-10000} - HERMES_GID=${HERMES_GID:-10000} - # ACHTUNG (Stefan, 19.07.2026): auf Wunsch testweise auf 0.0.0.0 geoeffnet, - # weil SSH-Tunnel/SSL-Setup Probleme machte. Hermes' eigene Empfehlung war - # eigentlich 127.0.0.1 + `ssh -L 9119:localhost:9119 `, weil - # das Dashboard API-Keys/Config im Klartext ausliefert. MUSS vor laengerem - # Betrieb hinter Auth (Caddy/nginx Basic-Auth o.ae.) — siehe README. + # Pflicht seit 19.07.2026: Hermes verweigert den 0.0.0.0-Bind mit hartem + # Exit, wenn kein Auth-Provider registriert ist ("Refusing to bind + # dashboard to 0.0.0.0 — ... no auth providers are registered"). Diese + # beiden Werte fuettern den dashboard.basic_auth-Block in + # hermes-agent-config/config.yaml.example (dort auch die Anleitung zum + # Hash-Erzeugen). + - HERMES_DASHBOARD_USER=${HERMES_DASHBOARD_USER:-admin} + - HERMES_DASHBOARD_PASSWORD_HASH=${HERMES_DASHBOARD_PASSWORD_HASH:?HERMES_DASHBOARD_PASSWORD_HASH muss in .env gesetzt sein - siehe .env.example. Ohne Auth-Provider verweigert Hermes den 0.0.0.0-Bind komplett.} + # Stefans Wunsch vom 19.07.2026: weiter auf 0.0.0.0, weil SSH-Tunnel/SSL + # Probleme machte — jetzt aber MIT registriertem Basic-Auth-Provider (s.o.), + # sonst kommt der Container laut Hermes' eigenem Auth-Gate gar nicht hoch. command: ["dashboard", "--host", "0.0.0.0", "--no-open"] networks: diff --git a/hermes-agent-config/config.yaml.example b/hermes-agent-config/config.yaml.example index 7c2e280..b2e0edf 100644 --- a/hermes-agent-config/config.yaml.example +++ b/hermes-agent-config/config.yaml.example @@ -31,3 +31,23 @@ model: # Gateway prüft das als "Authorization: Bearer " — der OpenAI SDK # (den Hermes intern nutzt) setzt den Header automatisch aus diesem Feld. api_key: "${HERMES_GATEWAY_TOKEN}" + +# ─── Dashboard-Auth ───────────────────────────────────────────────────── +# Seit 19.07.2026 Pflicht: Hermes verweigert den Bind des Dashboards auf +# 0.0.0.0 komplett, 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 Block bindet's nur +# noch auf 127.0.0.1 (Tunnel), egal was im docker-compose `command:` steht. +# +# Hash EINMALIG erzeugen (im laufenden Dashboard-Container, NICHT das +# Klartext-Passwort committen oder in .env schreiben — nur den Hash): +# docker exec -it hermes-agent-dashboard python -c \ +# "from plugins.dashboard_auth.basic import hash_password; print(hash_password('DEIN-PASSWORT'))" +# Ergebnis nach .env als HERMES_DASHBOARD_PASSWORD_HASH eintragen. +# +# ${HERMES_DASHBOARD_USER} / ${HERMES_DASHBOARD_PASSWORD_HASH} werden wie +# oben von Hermes selbst aus den Container-Env-Vars expandiert. +dashboard: + basic_auth: + username: "${HERMES_DASHBOARD_USER}" + password_hash: "${HERMES_DASHBOARD_PASSWORD_HASH}"