Documentación
Inicio rápido + descripción de cada función y de cada dispositivo (en constante actualización)
Arquitectura y stack tecnológico de SSH Everywhere
> Este documento explica de forma sencilla la arquitectura general, los protocolos y el stack tecnológico de SSH Everywhere. Está pensado para quienes quieren saber «cómo funciona realmente»: no hace falta ningún conocimiento técnico previo para entenderlo.
---
Entender todo el proyecto en una frase
SSH Everywhere es un panel integral de administración remota de servidores y dispositivos, a la altura de 1Panel / aaPanel. Su capacidad clave es: no importa en qué rincón de la red esté tu dispositivo —con IP pública, sin IP pública (detrás de NAT) o incluso un teléfono Android—, desde este único panel puedes gestionarlo como si usaras SSH.
El panel en sí se despliega en un servidor con IP pública (escucha en 0.0.0.0:5501). Accedes al panel desde el navegador y el panel, a su vez, alcanza cada dispositivo de destino mediante distintos «modos de conexión».
---
Arquitectura general (en un vistazo)
┌─────────────────────────────────────────────────────────────┐
│ Frontend del navegador (aplicación de una sola página, emula un SO de escritorio) │
│ Ventanas de escritorio · Barra de tareas · Menú de inicio · Panel de tarjetas │
│ · Terminal real · Biblioteca de iconos · JS nativo puro (sin framework) │
└──────────────────────────┬──────────────────────────────────┘
│ HTTP REST + SocketIO
┌──────────────────────────┴──────────────────────────────────┐
│ Backend del panel (Flask + Flask-SocketIO, Python) │
│ Programa principal · Servidor de túnel inverso · Servidor SocketIO · Transferencia de archivos │
│ Prevención de caídas · Gestión de sitios web · Copias de seguridad · Base de datos SQLite │
└───┬───────────────┬──────────────────┬──────────────────────┘
│ SSH │ Túnel inverso │ SocketIO
│ directo/por túnel │ (0.0.0.0:4433) │ (sobre HTTP)
▼ ▼ ▼
┌────────┐ ┌──────────────┐ ┌─────────────────┐
│ Servidor │ │ Linux sin IP │ │ Teléfono Android │
│ con IP pública │ │ pública/NAS/Raspberry Pi │ │ (Termux) │
└────────┘ └──────────────┘ └─────────────────┘
---
Cuatro modos de conexión (protocolos)
SSH Everywhere usa internamente 4 protocolos, cada uno con su función, orientados a distintos tipos de dispositivos:
1. SSH — el canal principal
Uso: gestionar las funciones esenciales de todos los «servidores Linux normales».
- Gestión del sistema (resumen, procesos, tareas programadas, cortafuegos, Docker, sitios web, fuentes de espejo, Prevención de caídas)
- Terminal (shell interactiva)
- Gestión de archivos (subir/descargar/editar/comprimir)
- Comprobación de estado (CPU/memoria/disco/temperatura)
- Ejecución de comandos
Modo de conexión:
- Con IP pública: el panel conecta directamente a
host:port - Sin IP pública: el panel primero crea un puerto proxy local mediante el túnel inverso y luego conecta por SSH
> Dicho de otro modo, la esencia del túnel inverso es «llevar SSH hasta los dispositivos que no tienen IP pública», por lo que SSH es el protocolo en el que todo acaba aterrizando.
2. Protocolo de túnel inverso — el canal de penetración
Uso: permitir que el panel alcance «dispositivos sin IP pública». El lado del dispositivo «conecta hacia fuera» de forma activa hasta el panel y establece una conexión TCP inversa de larga duración; el panel envía comandos y reenvía puertos a través de ese túnel.
Características: conexión TCP de larga duración + cifrado (AES-256-GCM); el servidor escucha en 0.0.0.0:4433.
Escenarios típicos:
- Operación mediante túnel por SSH de servidores Linux sin IP pública (dentro del túnel vuelve a correr SSH)
- Penetración de puertos: mapear el puerto de un servicio del dispositivo (p. ej.
8090) a un puerto público del panel
> Conceptos que se confunden con facilidad: reenvío de puertos vs penetración de puertos
>
> | | Reenvío de puertos | Penetración de puertos |
> |---|---|---|
> | Dispositivo aplicable | servidores con IP pública | dispositivos de penetración sin IP pública |
> | Implementación | DNAT del cortafuegos del sistema, en el propio servidor de destino | a través del túnel inverso |
> | Flujo de datos | visitante → IP pública de destino → puerto de destino | visitante → puerto público del panel → túnel inverso → puerto del dispositivo |
> | Depende de que el dispositivo esté en línea | no | sí (el dispositivo debe mantener el Agent en línea) |
>
> En una frase: el «reenvío» es para servidores con IP pública; la «penetración» es para dispositivos sin IP pública.
3. SocketIO — el canal exclusivo para teléfonos Android
Uso: gestionar Termux en teléfonos Android. La NAT de las redes móviles cambia con frecuencia y SSH es inestable, así que se usa un canal de sondeo largo estable con SocketIO (una solución madura y probada en dispositivos reales).
El Agent que corre en el teléfono ofrece, a través de SocketIO:
- Gestión del sistema (resumen/procesos/tareas programadas)
- Terminal (puente PTY)
- Gestión de archivos
- Monitorización de estado (reporta cada 30 segundos: carga/memoria/disco/batería/temperatura)
> Este es el único canal del proyecto que «no usa SSH» — porque los teléfonos Android no usan sshd, sino una conexión de larga duración SocketIO.
4. HTTP REST — entre el frontend y el backend
El frontend del navegador llama al backend del panel a través de la API REST y, al mismo tiempo, usa SocketIO para la comunicación bidireccional en tiempo real, como el terminal.
---
Las tres rutas de acceso a los dispositivos
| Tipo de dispositivo | Modo de conexión | Protocolo final | Notas |
|---|---|---|---|
| Servidor Linux con IP pública | conexión directa del panel | SSH | el escenario más directo |
| Servidor Linux sin IP pública (NAS/Raspberry Pi, etc.) | proxy por túnel inverso → SSH | SSH (transportado por el túnel) | el túnel es el «transportista» de SSH |
| Teléfono Android (Termux) | sondeo largo SocketIO | SocketIO (el único que no usa SSH) | canal estable exclusivo para teléfonos |
---
Almacenamiento de datos
- Base de datos SQLite (
data/ssheverywhere.db): tarjetas de servidores, reenvío de puertos, registros de penetración, usuarios, tareas, etc. - Sistema de archivos: archivos de copia de seguridad, claves del túnel, recursos estáticos.
---
Forma de despliegue
- Panel: servicio systemd
ssh-everywhere.service, escucha en0.0.0.0:5501. - Túnel inverso: escucha en
0.0.0.0:4433. - El Agent del dispositivo de destino se ejecuta como servicio residente (systemd en Linux / termux-services en Termux).
---
Sobre el nombre del proyecto «SSH Everywhere»
El proyecto se llama SSH Everywhere, que significa «gestionable en cualquier lugar, igual que SSH». SSH es, con diferencia, el modo de conexión principal de todo el proyecto: salvo el subescenario del teléfono Android, todas las demás funciones (gestión de servidores Linux, operación mediante túnel, transferencia de archivos, comprobación de estado) acaban aterrizando en SSH. Y la esencia del túnel inverso es precisamente «llevar SSH a cualquier lugar». Por eso el nombre «SSH Everywhere» expresa con exactitud la capacidad clave del proyecto.