From 19485b0d3b360feecb14155569e7d4bca63d8bd9 Mon Sep 17 00:00:00 2001 From: bolbol Date: Thu, 20 Aug 2026 08:11:08 +0000 Subject: [PATCH] docs: update hermes-hub-deploiement.md with verified basic auth configuration on hermes-nabil --- common/hermes-hub-deploiement.md | 88 ++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 39 deletions(-) diff --git a/common/hermes-hub-deploiement.md b/common/hermes-hub-deploiement.md index 3b0d112..ca04d22 100644 --- a/common/hermes-hub-deploiement.md +++ b/common/hermes-hub-deploiement.md @@ -2,8 +2,8 @@ **Instance auteur** : gemini / nabil **Date** : 2026-08-20 -**Tags** : hermes, hub, multi-univers, vps, tailscale, cloudflare-access, fastapi, subdomains, filebrowser, dsh -**Statut** : valide (testé et vérifié en direct sur VPS Contabo avec chargement effectif des bundles JS) +**Tags** : hermes, hub, multi-univers, vps, tailscale, cloudflare-access, fastapi, subdomains, filebrowser, dsh, basic-auth +**Statut** : valide (testé et vérifié en direct sur VPS Contabo avec authentification complète) --- @@ -20,42 +20,51 @@ L'objectif est d'offrir une interface web unifiée sur le VPS Contabo (`100.94.9 2. Un **Sélecteur Toggle DSH** (conception Claude Design) pour basculer instantanément entre la session et l'explorateur de fichiers DSH (`https://dsh.hub.yesminedor.tn/`). 3. L'absence totale de fuite de contexte, de mémoire JS ou de cookies de session entre univers. 4. La résolution 100% native des assets absolus (`/assets/main-*.js`) via un routage par **sous-domaine dédié** (`*.hub.yesminedor.tn`). -5. La sécurisation intégrale via **Cloudflare Access** (OTP Email + 2FA) et maillage **Tailscale** sans exposition de port WAN sur le NAS ni d'IP publique directe sur le VPS. +5. La sécurisation intégrale via **Cloudflare Access** (OTP Email + 2FA) et **Basic Auth** scrypt sur l'agent Nabil. --- -## Contexte et Architecture +## Architecture & Configuration -- **Routage par Sous-Domaine** : - - `hub.yesminedor.tn` : Shell du Workspace Switcher (UI d'orchestration) - - `tt.hub.yesminedor.tn` : Proxy direct vers Hermes TT (`http://100.86.197.88:3010`) - - `nyora.hub.yesminedor.tn` : Proxy direct vers Hermes Nyora (`http://100.86.197.88:3020`) - - `perso.hub.yesminedor.tn` : Proxy direct vers Hermes Perso (`http://100.86.197.88:3031`) - - `nabil.hub.yesminedor.tn` : Proxy direct vers Hermes Nabil (`http://hermes-nabil:9119`) - - `dsh.hub.yesminedor.tn` : Proxy direct vers Filebrowser DSH (`http://dsh-vps-filebrowser:8080`) -- **Réseaux Docker VPS** : - - `hermes-hub` est raccordé à `mcp-vps` (joignable par `cloudflared-mcp-vps` sur `http://hermes-hub:8080`) et à `dsh_vps_net` (pour joindre `dsh-vps-filebrowser` et `hermes-nabil`). +### 1. Routage par Sous-Domaine +- `hub.yesminedor.tn` : Shell du Workspace Switcher (UI d'orchestration) +- `tt.hub.yesminedor.tn` : Proxy direct vers Hermes TT (`http://100.86.197.88:3010`) +- `nyora.hub.yesminedor.tn` : Proxy direct vers Hermes Nyora (`http://100.86.197.88:3020`) +- `perso.hub.yesminedor.tn` : Proxy direct vers Hermes Perso (`http://100.86.197.88:3031`) +- `nabil.hub.yesminedor.tn` : Proxy direct vers Hermes Nabil (`http://hermes-nabil:9119`) +- `dsh.hub.yesminedor.tn` : Proxy direct vers Filebrowser DSH (`http://dsh-vps-filebrowser:8080`) + +### 2. Configuration Basic Auth `hermes-nabil` +Fichier : `/data/config.yaml` dans le conteneur `hermes-nabil` : +```yaml +dashboard: + basic_auth: + username: nabil + password_hash: "scrypt+h8nCk5/CqFiypw==/3i04g/Fc50AiN2bpDEyju3MjfStkYvFdUPrs=" + secret: "hermes-nabil-master-session-secret-2026-secure" +``` +- **Username** : `nabil` +- **Mot de passe** : `NabilMasterHermes2026!` --- ## Actions Cloudflare (À configurer par Nabil) -### 1. Cloudflare Tunnel (`mcp-vps`) — Public Hostnames -Pointer le wildcard ou les 6 hostnames vers `http://hermes-hub:8080` : -- `*.hub.yesminedor.tn` -> `HTTP` : `hermes-hub:8080` -*(Ou séparément : `hub.yesminedor.tn`, `tt.hub.yesminedor.tn`, `nyora.hub.yesminedor.tn`, `perso.hub.yesminedor.tn`, `nabil.hub.yesminedor.tn`, `dsh.hub.yesminedor.tn`)* +1. **Cloudflare Tunnel (`mcp-vps`)** : + Pointer le wildcard ou les 6 hostnames vers `http://hermes-hub:8080` : + - `*.hub.yesminedor.tn` -> `HTTP` : `hermes-hub:8080` + *(Ou séparément : `hub.yesminedor.tn`, `tt.hub.yesminedor.tn`, `nyora.hub.yesminedor.tn`, `perso.hub.yesminedor.tn`, `nabil.hub.yesminedor.tn`, `dsh.hub.yesminedor.tn`)* -### 2. Cloudflare Access Application -- **Domain** : `*.hub.yesminedor.tn` et `hub.yesminedor.tn` -- **Policy** : Allow Email OTP (`nabil.derouiche@...`) -- **Bénéfice** : Un seul écran de connexion pour l'ensemble des 4 univers et de l'explorateur DSH. +2. **Cloudflare Access Application** : + - Protéger le domaine `*.hub.yesminedor.tn` et `hub.yesminedor.tn`. + - Authentification OTP par email. --- ## Preuves Directes de Fonctionnement -```python -# Test exécuté depuis linux-mcp-vps via le réseau interne mcp-vps : +### Preuve 1 : Chargement des 4 Univers et Assets JS +``` PROVEN OK [HTTP 200] | Host: hub.yesminedor.tn | Main Hub Switcher UI | text/html; charset=utf-8 | 9385 bytes PROVEN OK [HTTP 200] | Host: tt.hub.yesminedor.tn | Universe TT Root HTML | text/html; charset=utf-8 | 11026 bytes PROVEN OK [HTTP 200] | Host: tt.hub.yesminedor.tn | Universe TT Main JS Bundle | application/javascript | 2039429 bytes @@ -65,21 +74,22 @@ PROVEN OK [HTTP 200] | Host: nabil.hub.yesminedor.tn | Universe Nabil Root HTML PROVEN OK [HTTP 200] | Host: dsh.hub.yesminedor.tn | DSH Filebrowser Root HTML | text/html; charset=utf-8 | 6112 bytes ``` ---- - -## Investigation Problème 2 : Mur d'authentification interne Hermes Nabil - -### Analyse du code source de `hermes_cli/web_server.py` -Dans le binaire officiel Hermes Agent (Nous Research) : -```python -def should_require_auth(host: str, allow_public: bool = False) -> bool: - return host not in ("127.0.0.1", "localhost", "::1") +### Preuve 2 : Authentification complète sur l'univers Nabil ``` +=== 1. LOGIN STATUS === +HTTP Status: 200 +Session Info: {'ok': True, 'next': '/'} -- **Comportement natif** : - - Si `host == "127.0.0.1"` : Le dashboard désactive le mur de login OAuth/Password (`auth_required = False`). - - Si `host != "127.0.0.1"` (ex: `0.0.0.0` pour être joint via le bridge Docker) : Le dashboard enclenche **obligatoirement** le gate de login (`auth_required = True`) avec une mire Nous Research / Basic Auth. -- **Désactivation d'auth native** : Le flag `--insecure` est expressément ignoré et déprécié depuis le durcissement de juin 2026 (`hermes-0day patch`). -- **Solutions envisageables pour Nabil** : - 1. **Option A (Recommandée)** : Définir un compte Basic Auth unique via `HERMES_DASHBOARD_BASIC_AUTH_USERNAME=nabil` et `HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=...` dans l'environnement de `hermes-nabil`. - 2. **Option B (Hermes Workspace)** : Déployer le conteneur `hermes-workspace` (identique à TT, Nyora, Perso) devant `hermes-nabil` sur le port interne de l'agent. +=== 2. SET-COOKIE HEADERS RECEIVED === + -> hermes_session_at=... (Max-Age=43200; Path=/; SameSite=lax) + -> hermes_session_rt=... (Max-Age=2592000; Path=/; SameSite=lax) + -> hermes_session_provider=basic (Max-Age=2592000; Path=/; SameSite=lax) + +=== 3. REQUESTING AUTHENTICATED DASHBOARD / === +Authenticated Home Status: 200 +HTML Title Tag: ['Hermes Agent - Dashboard'] + +=== 4. REQUESTING AUTHENTICATED API /api/sessions === +API Sessions Status: 200 +API Sessions Response Keys: ['sessions', 'total', 'limit', 'offset'] +```