Hermes Agent ya ejecuta comandos de shell en una máquina remota. Su backend de terminal SSH apunta a un solo host y ejecuta cada comando por ssh. Eso está bien para un único servidor. En cuanto tienes más de uno, o no quieres una clave privada metida en la máquina que corre el agente, el backend es la herramienta equivocada. El montaje más limpio es conectar Hermes a un servidor MCP remoto que llegue a tus servidores por él — sin clave en la máquina del agente, muchos hosts, reglas por conexión y un registro de auditoría. Este artículo cubre las dos cosas: cómo funciona hoy el backend SSH, y cómo conectar Termalin como servidor MCP en su lugar.
Para que conste: nosotros hacemos Termalin. Los detalles de Hermes Agent de abajo salen de su documentación pública y su gestor de incidencias, consultados el 15 de octubre de 2026.
Cómo usa SSH Hermes Agent hoy
Hermes Agent ejecuta sus herramientas a través de un backend de terminal. Uno de esos backends es SSH. Lo configuras en ~/.hermes/config.yaml:
terminal:
backend: ssh
Las credenciales van en ~/.hermes/.env:
TERMINAL_SSH_HOST=my-server.example.com
TERMINAL_SSH_USER=ubuntu
TERMINAL_SSH_PORT es 22 por defecto, y TERMINAL_SSH_KEY es una ruta a una clave privada (se usa la del sistema si lo dejas en blanco). La documentación describe el mecanismo con llaneza: «runs commands on a remote server over SSH» (ejecuta comandos en un servidor remoto por SSH), reutiliza la conexión con ControlMaster y un keepalive de 5 minutos en reposo, y cada comando es un ssh … bash -c nuevo.
De ese diseño se siguen tres hechos, y son la razón por la que la gente va buscando otra cosa:
- Un backend significa un host.
TERMINAL_SSH_HOSTyTERMINAL_SSH_USERson ambos obligatorios, y el backend no tiene inventario multihost. Para trabajar en un segundo servidor, reconfiguras. - Una clave privada vive en la máquina de Hermes, ya sea como un archivo o a través del ssh-agent del sistema. Cualquier cosa que pueda leer esa máquina puede usar la clave, y la clave abre todos los hosts que confían en ella.
- Hermes copia sus propias credenciales a la máquina remota. La documentación señala que, para los backends SSH, Modal y Daytona, Hermes empuja tu estado de
~/.hermes/— archivos de credenciales, skills, caché — al sandbox remoto durante la sesión, y vuelve a sincronizar los archivos de estado modificados al terminar.
La documentación sí plantea un argumento justo a favor del backend SSH: como el agente corre en otra máquina, «no puede modificar su propio código». Ese aislamiento es real, y volvemos a él más abajo.
Los problemas con los que la gente se topa
El gestor de incidencias de hermes-agent tiene un grupo reconocible de issues abiertas en torno a estas rutas de SSH. Citadas por número, sin exagerar lo que cada una significa para ti:
- El backend SSH falla con «path too long for Unix domain socket» cuando usas perfiles con nombre (#133436).
/reloadno limpia los entornos SSH en caché tras un cambio de configuración (#71085).- El modo SSH de escritorio tiene su propio repertorio: una comprobación en macOS que falla cosa de un segundo después (#80836), y cuelgues y timeouts del OpenSSH de Windows (#118983, #138378, #127320).
- Una tormenta de reintentos al arrancar, de unos 25 inicios de sesión SSH por minuto (#134197).
hermes updatefalla en redes que bloquean el puerto 22 (#133439).
Algunas de estas son sobre la app de escritorio y no sobre el backend, y algunas puede que ya estén resueltas para cuando leas esto. Lo que importa es el patrón: el backend SSH es una envoltura fina sobre una sola conexión ssh, así que hereda todas las aristas de esa conexión — incluida la necesidad de que el puerto 22 sea alcanzable.
Una alternativa sin claves: Termalin como servidor MCP remoto
Hermes Agent admite MCP. Puede hablar con servidores stdio y con servidores HTTP remotos, con una cabecera Bearer u OAuth. Ahí está la oportunidad. En lugar de darle al agente una clave y un host, lo apuntas a un servidor MCP remoto que ya sabe cómo llegar a tu flota.
Termalin es un cliente SSH con un servidor MCP alojado. Cada servidor que quieras hacer alcanzable corre un Connector — una instalación de una línea que marca hacia fuera y nunca escucha en un puerto, así que funciona detrás de NAT y CGNAT, y no hace falta que el puerto 22 esté abierto. Al dar de alta el servidor, su sshd confía en la autoridad de certificación SSH de Termalin. Cada inicio de sesión usa entonces un certificado de corta duración acotado a tu cuenta. Ninguna clave de larga duración queda en la máquina, y ninguna se le entrega al agente.
Los servidores MCP van bajo la clave de nivel superior mcp_servers en ~/.hermes/config.yaml. Hay dos formas de autenticarse. En un VPS — el sitio habitual donde corre Hermes — la clave API es más simple, así que empieza por ahí.
Opción A — clave API (lo mejor en un VPS)
Crea una clave API en el panel web de Termalin, acótala a los servidores que este agente deba tocar, ponla en solo lectura o en una lista de permitidos, y dale una caducidad. Ponla en ~/.hermes/.env:
TERMALIN_API_KEY=tk_live_your_key_here
Luego añade el servidor. Hermes resuelve las referencias ${VAR} en el momento de conectar con el servidor, también dentro de headers:
# ~/.hermes/config.yaml
mcp_servers:
termalin:
url: "https://termal.in/api/v1/mcp"
headers:
Authorization: "Bearer ${TERMALIN_API_KEY}"
Comprueba la conexión, y luego recarga MCP dentro de una sesión:
hermes mcp test termalin
/reload-mcp
Streamable HTTP es el transporte por defecto para los servidores url, y es lo que habla termal.in, así que no necesitas una línea transport:.
Opción B — inicio de sesión por OAuth (para un portátil)
Si Hermes corre en tu propia máquina con navegador, OAuth evita guardar una clave:
# ~/.hermes/config.yaml
mcp_servers:
termalin:
url: "https://termal.in/mcp"
auth: oauth
hermes mcp login termalin
En la primera conexión, Hermes imprime una URL de autorización, abre tu navegador cuando puede, y espera la devolución de llamada de OAuth en un puerto loopback local. El inicio de sesión de Termalin acepta esa redirección por loopback (http://127.0.0.1:<port>/callback), así que auth: oauth funciona por nuestra parte.
En un VPS sin pantalla, la devolución de llamada por loopback no puede llegar a tu portátil. Dos rodeos funcionan con Termalin: pega la URL de redirección de vuelta en el prompt de Hermes, o reenvía el puerto con ssh -N -L <port>:127.0.0.1:<port> user@host y termina el inicio de sesión en el navegador de tu portátil. Hermes también tiene un flujo por código de dispositivo, pero el inicio de sesión de Termalin no lo ofrece — en un servidor, la clave API de la Opción A es la vía más simple.
Lo que obtienes una vez conectado
Después de hermes mcp test termalin (o hermes mcp login termalin) y /reload-mcp, las herramientas de Termalin aparecen ante el agente: hosts_list para ver a qué servidores puede llegar, ssh_exec y ssh_exec_many para ejecutar comandos en uno o en muchos, sftp_list / sftp_read / sftp_write para archivos, server_metrics y alerts_list para la salud, y job_start / job_status / job_stop / job_list para el trabajo que sobrevive a una sola llamada.
Las diferencias prácticas frente al backend SSH:
- Muchos servidores a la vez.
ssh_exec_manyejecuta el mismo comando sobre un conjunto de hosts. No hay límite de un solo host ni reconfiguración para cambiar de máquina. - Reglas por conexión. En la tarjeta de apps de IA fijas una política de comandos para esta conexión: acceso completo, una lista de permitidos, o solo lectura. Empieza en solo lectura, amplía más tarde.
- Un registro de auditoría. Cada comando que el agente ejecuta queda marcado como del agente, grabado, y mostrado en el watch grid en vivo. «Esto lo hizo el agente» es un filtro, no una reconstrucción. Mira auditar lo que hace un agente (en inglés).
- Trabajos en segundo plano. Una migración o compilación larga corre como un trabajo, así que una tarea lenta no bloquea la sesión ni choca con un timeout fijo.
- Sin puerto abierto. El Connector marca hacia fuera, lo que además esquiva la clase de problema del «puerto 22 bloqueado».
Revocar el acceso es un interruptor, no una rotación de claves por todos los hosts. Para el razonamiento detrás de ese intercambio, mira por qué no deberías entregarle tu clave SSH a un agente (en inglés) y radio de impacto (en inglés).
Cuándo conservar el backend SSH en su lugar
Este no es un caso donde una opción gane en todas las filas.
- Si tienes exactamente una máquina, ya guardas una clave en la máquina de Hermes, y no quieres nada más en el circuito, el backend SSH es lo que menos hay que montar.
- El argumento de aislamiento de la documentación se sostiene: correr en un host aparte significa que el agente no puede editar su propio código. La vía MCP conserva también esa propiedad, ya que los comandos se ejecutan en tus servidores, no en la máquina del agente — pero si el backend SSH ya te da eso y no necesitas nada más, no hay razón para cambiar.
- Las herramientas MCP y de monitorización de Termalin necesitan un plan Pro ($10/mes, o $8/mes facturado anualmente — $96/año), o la prueba de 14 días, y un Connector en cada servidor. Una clave sola y el backend SSH no cuestan nada.
Usa Termalin cuando tienes varios servidores, cuando no quieres una clave en la máquina del agente, cuando los servidores están detrás de NAT, o cuando necesitas reglas por conexión y un rastro de auditoría. Conserva el backend SSH cuando una clave en un host es, de verdad, todo lo que necesitas.
Resolución de problemas
- Las herramientas no aparecen. Ejecuta
hermes mcp test termalin, confirma que laurles correcta y queTERMALIN_API_KEYestá definida en~/.hermes/.env. Luego/reload-mcpdentro de la sesión. 401del endpoint. La clave API falta, es incorrecta o ha caducado. Crea una nueva en el panel y actualiza~/.hermes/.env.- La referencia
${TERMALIN_API_KEY}se envía literal. Hermes expande${VAR}en el momento de conectar; asegúrate de que la variable está en~/.hermes/.env(o en la shell que lanzó Hermes) y reconecta. - El OAuth en un VPS sin pantalla nunca termina. La devolución de llamada por loopback no puede llegar a tu portátil. Reenvía el puerto con
ssh -N -L <port>:127.0.0.1:<port> user@host, o pega la URL de redirección de vuelta en el prompt. En un servidor, la vía de la clave API es más simple. - Transporte equivocado. Los servidores
urlusan Streamable HTTP por defecto, que es lo que usatermal.in. Pontransport: ssesolo para servidores que hablan únicamente SSE — no este.
Preguntas frecuentes
¿Hermes Agent admite MCP? Sí. Se conecta a servidores stdio y a servidores HTTP remotos, con una cabecera Bearer u OAuth, configurados bajo mcp_servers en ~/.hermes/config.yaml.
¿Puedo usar esto con Hermes Agent en un VPS? Sí, y la vía de la clave API es la más fácil ahí. El flujo de OAuth necesita un navegador o uno de los rodeos sin pantalla de arriba.
¿Tengo que abrir un puerto en mis servidores? No. El Connector marca hacia fuera, así que funciona detrás de NAT y CGNAT sin ningún puerto de entrada. Mira SSH detrás de NAT (en inglés).
¿Se le da mi clave SSH al agente? No. A los servidores se llega con certificados de corta duración emitidos en cada inicio de sesión. Ninguna clave de larga duración sale de Termalin, y ninguna se coloca en el entorno del agente.
Termalin es un cliente SSH multiplataforma con un servidor MCP alojado, un custodio de claves y política de agente por host. ¿Usas otro agente? El mismo montaje sin claves funciona para OpenClaw, Codex (en inglés) y otros — o descarga la app para empezar.