# Terminal web

> Abre una shell interactiva en un servidor desde el navegador, con certificados que caducan en minutos y permisos por asset.

La terminal web abre una shell interactiva en un servidor, un CT o un contenedor (de Docker, o de Podman como root) desde el navegador. Nadie necesita una clave SSH: cada sesión usa un certificado SSH firmado solo para ella.

[Captura: Terminal web conectada a web-01 como infraward-admin]

## Requisitos

- **OpenBao** activado (el despliegue por defecto). Sin él, la terminal no está disponible.
- El servidor se dio de alta en modo con certificados y con **Permitir acceso interactivo de administración**. Si ya está dado de alta, actívalo desde su ficha: en **Red y acceso**, pulsa **Activar** junto a **Administración** y ejecuta el comando que muestra InfraWard. Solo los administradores pueden hacerlo.
- La persona tiene permiso sobre el asset (ver abajo) y confirma su identidad al abrir la sesión.

## Cómo funciona una sesión

1. La persona pulsa **Abrir terminal**. La terminal se abre en otra pestaña; cada pestaña es una sesión independiente.
2. La API comprueba el permiso y la reautenticación reciente y emite un ticket de un solo uso.
3. El navegador abre un WebSocket a `/gateway/` en el mismo origen. El servicio `gateway` comprueba el ticket y la cookie de sesión.
4. La API firma un certificado SSH para la cuenta `infraward-admin` con el principal `infraward-operators`, válido durante 120 segundos (`TERMINAL_CERT_TTL`). El gateway lo usa para abrir `ssh -tt`. La sesión sigue aunque el certificado caduque, porque solo se comprueba al entrar.
5. La apertura, el cierre y el motivo del cierre quedan en el registro de auditoría.

`infraward-admin` tiene `sudo` sin contraseña. Por eso el acceso se da por asset y las sesiones siempre van ligadas a un usuario identificado y reautenticado.

## Quién puede abrir una terminal

Los administradores pueden abrir una terminal en cualquier asset con acceso de administración. El resto necesita una política de acceso. En **Ajustes → Acceso**, o en el bloque **Acceso a la terminal** de la ficha de un asset, elige:

- **A quién**: una persona o un rol entero.
- **Dónde**: un asset (y todo lo que contiene), una etiqueta o un proyecto.

[Captura: Política de acceso: laura.gomez@example.com puede abrir terminales en los assets con la etiqueta prod]

Retirar una política afecta de inmediato a las sesiones nuevas.

## Límites

| Límite | Por defecto | Variable (gateway) |
|---|---|---|
| Sesiones a la vez por servidor | 4 | `HOST_MAX_TERMINAL_SESSIONS` |
| Sesiones a la vez por persona | 3 | `TERMINAL_MAX_SESSIONS_PER_USER` |
| Cierre por inactividad | 15 minutos | `TERMINAL_IDLE_TIMEOUT` |
| Duración máxima de una sesión | 8 horas | `TERMINAL_MAX_DURATION` |

Al reiniciar o actualizar el gateway, se avisa a las sesiones abiertas y se cierran a los 60 segundos (`GATEWAY_SHUTDOWN_GRACE`). El worker y el gateway son contenedores distintos, así que un escaneo pesado o un reinicio del worker no afectan a las terminales abiertas.

## Acciones de solo lectura

Algunas acciones ejecutan un comando fijo en el servidor a través de la terminal, en lugar de una shell. Hoy la única es habilitar usuarios de Podman rootless (consulta [Podman](/es/docs/enrollment.md#podman)). La terminal se abre con la etiqueta **Solo lectura**, explica lo que se va a ejecutar como root y espera a que pulses **Ejecutar**. Ves el comando y su salida, pero no puedes escribir; al cerrar la pestaña se corta la sesión. Estas sesiones exigen el mismo permiso, la misma reautenticación y el mismo acceso de administración que cualquier terminal, y se auditan igual, con la acción registrada.

## Copiar y pegar

Usa los botones **Copiar** y **Pegar**, o `Ctrl+Shift+C` / `Ctrl+Shift+V` (`Cmd+C` / `Cmd+V` en macOS). Algunos navegadores piden permiso para leer el portapapeles.

## Retirar el acceso de administración

Desde la ficha del servidor, **Retirar** en el acceso de administración genera un comando que elimina `infraward-admin`, su regla de sudoers y su configuración de sshd. Si la cuenta tiene procesos en marcha, se bloquea y se caduca en lugar de borrarse.

---

Página HTML: https://infraward.net/es/docs/terminal/
