Logotipo de Bitdoze

Configuración del Panel de Hermes Agent: SSH, Caddy, Docker y Seguridad (2026)

Ejecuta el panel web de Hermes Agent en tu VPS con túnel SSH, proxy inverso Caddy, Docker o systemd.

Dragos

Actualizado Publicado 21 min de lectura

Configuración del Panel de Hermes Agent: SSH, Caddy, Docker y Seguridad (2026)

Si estás ejecutando Hermes Agent en un VPS y quieres una forma de gestionar sesiones, claves de API, memoria y configuración desde el navegador, el panel integrado hace exactamente eso. A partir de la v0.16 (junio de 2026), el panel se distribuye como un panel de administración nativo en el navegador. Está a un solo comando de distancia, pero la configuración por defecto solo escucha en localhost. Esta guía cubre cómo ejecutarlo localmente, acceder de forma remota mediante un túnel SSH o a través de un proxy inverso Caddy con protección por contraseña, desplegarlo en Docker y mantenerlo en ejecución permanente con systemd.

GitHub de Hermes Agent

Lo que cubre esta guía

  • Iniciar el panel de Hermes localmente y en un servidor remoto
  • Acceso remoto mediante reenvío de puertos SSH (lo más simple y seguro)
  • Exponerlo externamente con el proxy inverso Caddy
  • Añadir Basic Auth con usuario y contraseña
  • Ejecutarlo permanentemente con systemd o Docker
  • Riesgos de seguridad que debes conocer

Qué hace el panel de Hermes

El panel te ofrece una interfaz de navegador para gestionar tu instancia de Hermes Agent. Desde él puedes:

  • Ver y gestionar las sesiones de chat activas
  • Explorar y editar los archivos de memoria del agente
  • Configurar claves de API y ajustes de modelos
  • Monitorizar el uso de tokens y los costes
  • Gestionar habilidades y configuraciones de herramientas

Se conecta al proceso de gateway de Hermes que ya está en ejecución en tu servidor — no inicia un segundo agente.

Recorrido por el panel

Una vez que el panel está en ejecución, la barra de navegación superior te da acceso a varias pestañas. Esto es lo que muestra cada una.

Estado

La pestaña Estado es la página de inicio. Muestra si el agente y el gateway están en ejecución, las plataformas conectadas y una lista de sesiones recientes con recuentos de mensajes y vistas previas.

Página de estado del panel de Hermes mostrando la salud del agente, el estado del gateway, las plataformas conectadas y las sesiones recientes

Sesiones

La pestaña Sesiones lista todas las sesiones pasadas y activas. Cada entrada muestra el modelo usado, el recuento de mensajes, las herramientas invocadas y cuándo estuvo activa por última vez. Puedes buscar en el contenido de los mensajes de todas las sesiones y eliminar las antiguas.

Página de sesiones del panel de Hermes mostrando 51 sesiones con búsqueda, recuentos de mensajes y tipos de sesión

Analíticas

La pestaña Analíticas registra el uso de tokens, el número de sesiones y las llamadas a la API a lo largo del tiempo. Muestra desgloses diarios y estadísticas por modelo para que veas exactamente cuánto te cuesta tu agente.

Página de analíticas del panel de Hermes mostrando tokens totales, gráfico de uso diario y desglose por modelo

Cron

La pestaña Cron te permite crear y gestionar tareas programadas. Defines un prompt, estableces una expresión cron y eliges dónde se entregan los resultados (local, Discord, etc.). Puedes pausar, ejecutar manualmente o eliminar trabajos desde aquí.

Página de cron del panel de Hermes mostrando el formulario de creación de trabajos y un trabajo programado diario de búsqueda de noticias tecnológicas

Configuración

La pestaña Configuración te ofrece un editor estructurado para ~/.hermes/config.yaml. Está organizada por secciones — General, Agent, Terminal, Display, Memory, Security y más — cada una con campos etiquetados. Puedes editar los valores directamente o cambiar al modo YAML en bruto.

Página de configuración del panel de Hermes mostrando los ajustes Generales incluyendo modelo, zona horaria y lista de comandos permitidos

Claves

La pestaña Claves gestiona las claves de API y los inicios de sesión OAuth almacenados en ~/.hermes/.env. Muestra qué proveedores de LLM están configurados, gestiona los flujos OAuth (Nous Portal, OpenAI Codex) y te permite añadir o desconectar credenciales sin tocar la línea de comandos.

Página de claves del panel de Hermes mostrando conexiones de proveedores OAuth y gestión de claves API de proveedores LLM

Iniciar el panel

La forma más sencilla de empezar:

bash
hermes dashboard

Esto compila la interfaz web (solo la primera vez) y luego inicia un servidor en http://127.0.0.1:9119. También abrirá una pestaña del navegador si lo estás ejecutando localmente.

Opciones disponibles

Opción Por defecto Descripción
--host 127.0.0.1 Interfaz a la que vincularse
--port 9119 Puerto en el que escuchar
--no-open desactivada Omitir la apertura automática del navegador

La vinculación por defecto a 127.0.0.1 significa que solo tu máquina puede acceder al panel. Es el valor seguro por defecto — si necesitas acceso remoto, sigue leyendo.

Acceso remoto mediante reenvío de puertos SSH

Si solo quieres abrir el panel desde tu portátil mientras se ejecuta en un VPS, el reenvío de puertos SSH es la opción más sencilla. Sin proxy inverso, sin DNS, sin puertos abiertos en el servidor — todo pasa por tu conexión SSH existente.

bash
ssh -L 9119:127.0.0.1:9119 user@your-vps-ip

Luego abre http://127.0.0.1:9119 en el navegador de tu portátil. La opción -L reenvía tu puerto local 9119 al localhost:9119 del VPS a través del túnel SSH. El panel lo ve como una conexión local.

Esta es la forma más segura de acceder al panel de forma remota porque:

  • El panel permanece vinculado a 127.0.0.1 — nada más en internet puede alcanzarlo
  • El tráfico va cifrado dentro de SSH — no hace falta configuración TLS adicional
  • Ya tienes acceso SSH, así que no hay nada nuevo que proteger
  • No hay puertos abiertos en el VPS más allá de SSH

Cuándo usar el reenvío SSH

Usa esto si eres la única persona que accede al panel y siempre te conectas desde una máquina con acceso SSH. Sáltate por completo las secciones de Caddy y systemd — simplemente mantén hermes dashboard en ejecución en una sesión de tmux o screen.

Túnel SSH en segundo plano

Si quieres que el túnel permanezca abierto en segundo plano:

bash
ssh -f -N -L 9119:127.0.0.1:9119 user@your-vps-ip
  • -f — pasa a segundo plano tras la autenticación
  • -N — sin comando remoto, solo el túnel

Para detenerlo más tarde:

bash
# Find the process
ps aux | grep "ssh -f -N -L 9119"

# Kill it
kill <PID>

Mantener el panel en ejecución en el VPS

Con el reenvío SSH, el panel aún necesita estar en ejecución en el VPS. Usa tmux o screen para que sobreviva a las desconexiones SSH:

bash
# On the VPS
tmux new -s hermes
hermes dashboard
# Ctrl+B then D to detach

# Later, reattach with
tmux attach -t hermes

Si quieres que se ejecute permanentemente incluso sin SSH, usa el servicio systemd descrito más abajo.

Exponer el panel externamente

Para acceder al panel desde otra máquina (tu teléfono, tu portátil o un compañero), necesitas dos cosas: vincularlo a todas las interfaces y poner un proxy inverso delante.

Paso 1: Vincular a 0.0.0.0

bash
hermes dashboard --host 0.0.0.0

Esto hace que el servidor escuche en todas las interfaces de red. Por sí solo, significa que cualquiera que pueda alcanzar la IP de tu servidor puede acceder al panel — no te detengas aquí.

Paso 2: Proxy inverso con Caddy

Si ya estás ejecutando Caddy como proxy inverso en tu servidor, añade un bloque como este a tu Caddyfile:

text
hermes.yourdomain.com {
    reverse_proxy your-server-ip:9119
    encode gzip
    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        X-Content-Type-Options nosniff
        X-Frame-Options SAMEORIGIN
        X-XSS-Protection "1; mode=block"
    }
}

Si tu instancia de Caddy se ejecuta dentro de Docker y el panel se ejecuta en el host, usa host.docker.internal en lugar de la dirección IP:

text
hermes.yourdomain.com {
    reverse_proxy host.docker.internal:9119
}

Requisito de red del host

Si el panel se vincula a 127.0.0.1 (el valor por defecto), los contenedores Docker no pueden alcanzarlo a través de host.docker.internal. Debes usar –host 0.0.0.0 o ejecutar Caddy directamente en el host (no en Docker).

Luego recarga Caddy:

bash
sudo docker exec caddy caddy reload --config /etc/caddy/Caddyfile

O si Caddy se ejecuta en el host:

bash
sudo systemctl reload caddy

Añadir protección con contraseña

El panel de Hermes no tiene una función de contraseña integrada. Pero como está detrás de Caddy, puedes usar HTTP Basic Auth a nivel de proxy. Esto añade un aviso de inicio de sesión en el navegador antes de que nadie llegue al panel.

Generar un hash de contraseña

Caddy almacena las contraseñas como hashes bcrypt. Genera uno:

bash
caddy hash-password --plaintext 'your-password-here'

O dentro de un Caddy dockerizado:

bash
sudo docker exec caddy caddy hash-password --plaintext 'your-password-here'

Esto produce una cadena hash que empieza con $2a$....

Actualizar el Caddyfile

Añade una directiva basic_auth dentro del bloque del sitio:

text
hermes.yourdomain.com {
    basic_auth {
        yourusername $2a$14$...your-hash-here...
    }
    reverse_proxy host.docker.internal:9119
    encode gzip
    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        X-Content-Type-Options nosniff
        X-Frame-Options SAMEORIGIN
        X-XSS-Protection "1; mode=block"
    }
}

Sustituye yourusername y el hash por los tuyos. Puedes añadir varios pares usuario-hash para distintos usuarios.

Verificar que funciona

Sin credenciales — espera un 401:

bash
curl -sk -o /dev/null -w "%{http_code}" https://hermes.yourdomain.com/
# 401

Con credenciales — espera un 200:

bash
curl -sk -o /dev/null -w "%{http_code}" -u yourusername:your-password-here https://hermes.yourdomain.com/
# 200

Cuando abras la URL en un navegador, verás una ventana emergente de inicio de sesión antes de que el panel cargue.

Bloquear el acceso directo al puerto 9119

Con Caddy gestionando la autenticación y TLS en el puerto 443, no hay razón para dejar que nadie alcance el puerto 9119 directamente. Si alguien descubre la dirección IP de tu servidor, podría saltarse Caddy y acceder al panel por el puerto 9119 sin contraseña. Bloquéalo con iptables:

bash
# Allow Docker/Caddy internal traffic first
sudo iptables -A INPUT -p tcp --dport 9119 -s 172.16.0.0/12 -j ACCEPT

# Block everything else
sudo iptables -A INPUT -p tcp --dport 9119 -j DROP

La regla de permiso de Docker es crítica

Si solo bloqueas el 9119 sin permitir primero el tráfico de Docker, Caddy también quedará bloqueado. Caddy se conecta al panel a través de la red interna de Docker (rango 172.16.0.0/12). La regla ACCEPT debe ir antes que la regla DROP — iptables procesa las reglas en orden.

Verifica que las reglas están en su sitio:

bash
sudo iptables -L INPUT -n | grep 9119
# ACCEPT  tcp  --  172.16.0.0/12  0.0.0.0/0  tcp dpt:9119
# DROP    tcp  --  0.0.0.0/0      0.0.0.0/0  tcp dpt:9119

Esto bloquea todas las conexiones externas al 9119 mientras permite que Caddy alcance el panel internamente.

Persiste la regla entre reinicios

Las reglas de iptables se pierden al reiniciar por defecto. Guárdalas: sudo iptables-save | sudo tee /etc/iptables/rules.v4 Si el archivo no existe, instala iptables-persistent primero: sudo apt install iptables-persistent

Si usas ufw en lugar de iptables directamente:

bash
sudo ufw deny 9119/tcp

Ejecutar permanentemente con systemd

El comando hermes dashboard se ejecuta en primer plano. Si cierras tu terminal, se detiene. Para mantenerlo en ejecución permanente, crea un servicio systemd.

Crear el archivo de servicio

bash
sudo tee /etc/systemd/system/hermes-dashboard.service << 'EOF'
[Unit]
Description=Hermes Agent Dashboard
After=network.target

[Service]
Type=simple
User=dragos
ExecStart=/home/dragos/.hermes/hermes-agent/venv/bin/python -m hermes_cli.main dashboard --host 0.0.0.0 --port 9119 --no-open
Restart=on-failure
RestartSec=5
Environment=HOME=/home/dragos

[Install]
WantedBy=multi-user.target
EOF

Ajusta User y la ruta de Python a tu configuración. Puedes encontrar la ruta exacta con:

bash
which hermes
# or
readlink -f $(which hermes)

Habilitar e iniciar

bash
sudo systemctl daemon-reload
sudo systemctl enable hermes-dashboard
sudo systemctl start hermes-dashboard
sudo systemctl status hermes-dashboard

Revisar los logs

bash
sudo journalctl -u hermes-dashboard -f

Ejecutar en Docker

Si prefieres ejecutar el panel en un contenedor Docker (coherente con cómo despliegas otros servicios en el VPS), puedes containerizarlo. La restricción clave es que el panel necesita alcanzar el gateway de Hermes en 127.0.0.1:8642, por lo que el contenedor debe usar la red del host.

Dockerfile

dockerfile
FROM python:3.12-slim

RUN pip install hermes-agent[web]

EXPOSE 9119

CMD ["python", "-m", "hermes_cli.main", "dashboard", "--host", "0.0.0.0", "--port", "9119", "--no-open"]

docker-compose.yml

yaml
services:
  hermes-dashboard:
    build: .
    container_name: hermes-dashboard
    network_mode: host
    restart: unless-stopped

network_mode: host es obligatorio porque el gateway se vincula a 127.0.0.1:8642 — sin él, el contenedor no puede alcanzar el gateway ni siquiera con host.docker.internal.

Con Caddy en el mismo stack

Si ya ejecutas Caddy en Docker (configuración típica con una red externa web), el contenedor del panel usando network_mode: host es alcanzable desde Caddy en host.docker.internal:9119. Añade el bloque de Caddy descrito en la sección del proxy inverso Caddy anterior — no hace falta ningún cambio.

Compilar y ejecutar

bash
docker compose up -d --build

Comprobar que está en ejecución

bash
sudo docker ps --filter name=hermes-dashboard
curl -sk -o /dev/null -w "%{http_code}" http://127.0.0.1:9119/

Red del host y seguridad

network_mode: host significa que el contenedor comparte directamente la pila de red del host. El puerto del panel es accesible en todas las interfaces — asegúrate de que Caddy o un firewall esté delante si lo expones públicamente.

Riesgos de seguridad

Exponer el panel de un agente de IA a internet no es lo mismo que exponer un sitio web estático. Esto es lo que necesitas entender.

El panel es un plano de control

Cualquiera con acceso al panel puede ver sesiones, leer archivos de memoria, modificar claves de API y cambiar la configuración. No es solo una página de estado de solo lectura — es acceso administrativo completo a tu agente de IA.

Basic Auth envía las credenciales en base64

HTTP Basic Auth codifica tu usuario y contraseña en base64 dentro de cada cabecera de petición. Sin HTTPS, cualquiera que intercepte tu red puede decodificarlas al instante. Caddy proporciona HTTPS automático con Let’s Encrypt, lo que resuelve esto — pero solo si usas un nombre de dominio real, no una dirección IP en crudo.

Nunca lo expongas sin HTTPS

No ejecutes el panel en el puerto 9119 con –host 0.0.0.0 sin un proxy inverso que termine TLS delante. Basic Auth sobre HTTP plano es esencialmente como no tener autenticación.

Almacenamiento de credenciales del navegador

Una vez que inicias sesión mediante Basic Auth, la mayoría de los navegadores cachean las credenciales y las envían automáticamente en cada petición a ese dominio. Si alguien obtiene acceso a tu sesión del navegador (ordenador compartido, exploit del navegador), tiene acceso libre al panel.

Sin límite de peticiones por defecto

Ni el panel ni Basic Auth incluyen protección contra fuerza bruta. Un atacante puede probar miles de contraseñas por minuto. Considera añadir reglas de fail2ban para los logs de tu proxy inverso, o usar forward_auth de Caddy con un proveedor de autenticación más robusto si lo necesitas.

La lista blanca de IPs ayuda

Si siempre accedes al panel desde la misma IP (oficina, casa), añade reglas de firewall para restringir el acceso:

bash
# Allow only your IP
sudo ufw allow from YOUR_IP_ADDRESS to any port 443
sudo ufw deny 443

O en Caddy, usa un matcher @blocked:

text
hermes.yourdomain.com {
    @blocked not remote_ip YOUR_IP_ADDRESS/32
    respond @blocked "Forbidden" 403

    basic_auth {
        yourusername $2a$14$...
    }
    reverse_proxy host.docker.internal:9119
}

El panel se comunica con el gateway

El panel se comunica con la API del gateway de Hermes en 127.0.0.1:8642. Si alguien compromete el panel, también obtiene acceso indirecto al gateway — que controla el agente capaz de ejecutar comandos de terminal en tu servidor. Trata el panel como una superficie privilegiada, no como una función de conveniencia.

Resumen de riesgos

Riesgo Gravedad Mitigación
Panel expuesto sin HTTPS Crítica Usa siempre Caddy con TLS
Puerto 9119 abierto a internet Crítica Bloquear con iptables (ver arriba)
Contraseña débil o reutilizada Alta Genera una contraseña aleatoria fuerte
Sin protección contra fuerza bruta Media Añade fail2ban o lista blanca de IPs
El navegador cachea credenciales Media Usa navegación privada en máquinas compartidas
El panel da acceso al gateway Alta Restricción por IP + autenticación fuerte + monitorizar logs

Referencia rápida

bash
# Local only (safe default)
hermes dashboard

# SSH tunnel (remote access, safest)
ssh -L 9119:127.0.0.1:9119 user@your-vps-ip
# Then open http://127.0.0.1:9119 on your laptop

# Remote access (bind to all interfaces)
hermes dashboard --host 0.0.0.0

# Custom port
hermes dashboard --host 0.0.0.0 --port 3000

# With systemd (permanent)
sudo systemctl start hermes-dashboard

# With Docker
docker compose up -d --build

# Check it is running
curl -sk -o /dev/null -w "%{http_code}" https://hermes.yourdomain.com/

Para más información sobre la configuración de Hermes Agent, la integración de mensajería y las habilidades, consulta la guía de configuración de Hermes Agent y la guía de integración de MIMO V2 Pro. Para los mejores paneles de terceros e interfaces web más allá del integrado, consulta el resumen de mejores paneles de Hermes. Para recomendaciones de modelos asequibles para Hermes Agent, consulta la guía de mejores modelos baratos para Hermes Agent. Para la gestión estructurada de tareas multi-agente con tableros visuales, la guía de configuración de Hermes Kanban cubre tableros de tareas Kanban, dependencias y patrones de coordinación.

Más guías de herramientas de IA