Cómo reenviar una terminal directamente al navegador usando WeTTY
Imagina esto: necesitas urgentemente acceder a un servidor de casa o una máquina virtual de trabajo desde una tablet, la laptop de otra persona o una computadora de trabajo con políticas de seguridad estrictas donde el puerto 22 está completamente bloqueado y no puedes instalar un cliente SSH adecuado. Abres un navegador, escribes una dirección y obtienes una línea de comandos completa con tu shell familiar.
Esto es exactamente para lo que se creó el proyecto WeTTY (Web + TTY).

Bajo el Capó
Soluciones más antiguas como Ajaxterm o Anyterm eran terriblemente lentas porque dependían de solicitudes HTTP regulares que iban y venían. WeTTY funciona de manera diferente. El backend está construido con TypeScript y Node.js, la comunicación con el navegador ocurre a través de WebSockets, y el renderizado lo maneja el emulador de terminal xterm.js (el mismo que impulsa VS Code).
Gracias a la combinación de xterm.js y WebSocket, la latencia de entrada apenas se nota si tienes una conexión a internet estable. Las utilidades con pseudo-gráficos funcionan sin problemas en la ventana del navegador: htop, tmux, mc, vim y nano. El soporte para mouse, atajos de teclado y colores de terminal funcionan todos como se espera.
Cómo Lanzar
Puedes desplegar la utilidad de dos formas rápidas: a través de npm o en un contenedor Docker.
Opción 1. Instalación a través de npm
Si la máquina ya tiene Node.js versión 20 o superior, junto con herramientas de compilación (make, python, build-essential), la utilidad se puede instalar con un solo comando:
npm -g i wetty
Después de la instalación, inicia el servicio:
wetty --port 3000
Ahora navega a http://localhost:3000 e inicia sesión con el usuario deseado. Si WeTTY se está ejecutando como un usuario regular, establecerá una sesión SSH a localhost por defecto. Ejecutar como root invocará /bin/login en su lugar.
Opción 2. Ejecutar en Docker
Personalmente me resulta más fácil mantener utilidades como esta en contenedores para evitar saturar el host con paquetes globales innecesarios de Node.js:
docker run --rm -p 3000:3000 wettyoss/wetty --ssh-host=192.168.1.50
Reemplaza 192.168.1.50 con la dirección IP del host al que quieres conectarte a través de SSH.
Parámetros de Lanzamiento Útiles
La utilidad ofrece configuración flexible a través de flags de línea de comandos:
--ssh-hosty--ssh-portredirigen la conexión a un servidor remoto separado.--ssh-userestablece un usuario por defecto para que no tengas que escribir el login cada vez.--ssl-keyy--ssl-certhabilitan el cifrado directo del tráfico.--allow-iframepermite incrustar la terminal en iframes en otros sitios (por ejemplo, en paneles de control o monitoreo).
Si no quieres especificar flags cada vez que inicias, puedes empaquetar los parámetros en un archivo de configuración y pasarlo a través de --conf.
Seguridad y Uso en Producción
Exponer un puerto HTTP desprotegido de WeTTY a internet es absolutamente recomendable. Cualquier atacante podría intentar fuerza bruta en contraseñas o interceptar tráfico sin cifrar.
En la práctica, un proxy inverso (NGINX, Traefik o Caddy) típicamente se coloca delante de WeTTY para manejar múltiples responsabilidades:
- Emitir y renovar certificados SSL gratuitos de Let's Encrypt.
- Proxy de conexiones WebSocket.
- Una capa adicional de autorización a través de Basic Auth o Authelia.
- Restringir acceso basado en listas blancas de direcciones IP.
Aquí hay un ejemplo típico de configuración de NGINX:
location /wetty/ {
proxy_pass http://127.0.0.1:3000/wetty/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 43200000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
No olvides ejecutar WeTTY mismo con el flag --base /wetty/ para que las rutas de enrutamiento se alineen correctamente.
Para Quién Es Este Proyecto
WeTTY aborda necesidades prácticas específicas:
- Administración rápida de servidores caseros (Home Lab) y routers directamente desde un teléfono móvil o iPad.
- Configurar entornos de demostración y cajas de arena de entrenamiento donde los estudiantes necesitan acceso a la terminal sin configurar clientes SSH.
- Incrustar una ventana de terminal en paneles de gestión de infraestructura web internos.
- Acceder a servidores desde redes corporativas aisladas donde solo los puertos 80 y 443 están abiertos.
Si necesitas una forma ligera de levantar una terminal en el navegador sin interfaces web pesadas como Cockpit o Proxmox, WeTTY maneja esto en solo un par de minutos. Solo levanta el contenedor detrás de un proxy inverso y añade autenticación.
Proyectos relacionados