Instalar mosh-server en Ubuntu, Debian y Alpine requiere compilar o descargar el paquete oficial, habilitar el rango de puertos UDP 60000-61000 y configurar un locale UTF-8 en el sistema operativo. Este demonio se inicia mediante una conexión SSH inicial para mantener sesiones remotas persistentes ante cortes de cobertura o cambios de IP.
Requisitos de red y puertos UDP para mosh-server
Mosh arranca el binario mosh-server mediante una conexión OpenSSH previa que escucha habitualmente en el puerto TCP 22. Una vez autenticado el usuario mediante contraseña o clave pública, el servidor asigna un puerto UDP dentro del rango por defecto 60000-61000 y cierra la comunicación interactiva sobre TCP para gestionar el estado de la terminal mediante datagramas cifrados.
El cortafuegos del servidor debe permitir tráfico entrante en ese rango para que el cliente móvil o de escritorio reciba la respuesta. A diferencia de SSH convencional, Mosh no implementa reenvío de puertos TCP (port forwarding) ni reenvío de ventanas X11, concentrando su diseño en la tolerancia a la latencia y la itinerancia de red.
| Propiedad técnica | OpenSSH estándar | Mosh con mosh-server |
|---|---|---|
| Protocolo de transporte | TCP constante con control de flujo | UDP mediante protocolo State Synchronization |
| Rango de puertos | TCP 22 por defecto | UDP 60000 a 61000 más TCP 22 inicial |
| Cambio de dirección IP | La sesión se interrumpe inmediatamente | La sesión continúa sin reiniciar el proceso |
| Reenvío de puertos y X11 | Permitido en configuración estándar | No implementado por arquitectura de diseño |
Si el servidor se encuentra tras una traducción de direcciones (NAT) estricta sin IP pública ni posibilidad de abrir puertos en el enrutador, se pueden utilizar redes privadas en malla como Prialo para conectar servidores o Tailscale, evitando la exposición directa de puertos UDP a Internet.
Instalación de mosh-server en Ubuntu y Debian con apt
El gestor de paquetes apt incluye el binario mosh-server en los repositorios oficiales de Ubuntu y Debian sin necesidad de fuentes externas. La instalación del paquete mosh despliega tanto el ejecutable del cliente como las utilidades del servidor requeridas por la conexión remota.
sudo apt update
sudo apt install -y moshPara habilitar el paso de paquetes a través del cortafuegos integrado UFW (Uncomplicated Firewall), se debe declarar la regla correspondiente al rango UDP asignado por el protocolo:
sudo ufw allow 60000:61000/udp
sudo ufw status verboseSi el servicio SSH se ejecuta en un puerto no estándar, mosh permite especificarlo en el cliente mediante el argumento --ssh="ssh -p PUERTO", pero en el host remoto el ejecutable mosh-server debe encontrarse obligatoriamente dentro del $PATH del sistema (habitualmente en /usr/bin/mosh-server).
Configuración del locale UTF-8 para evitar errores de arranque
Mosh exige que el servidor y el cliente utilicen una codificación de caracteres compatible con UTF-8 para iniciar la sesión. Si las variables de entorno de localización señalan a configuraciones POSIX o C sin soporte multilingüe, mosh-server se detiene inmediatamente mostrando un mensaje de error crítico al conectar.
En instalaciones mínimas de Debian y Ubuntu Server, el generador de locales suele requerir configuración explícita. El siguiente bloque de comandos genera el locale necesario y establece la configuración del sistema:
sudo apt install -y locales
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8Para aplicar estos cambios en la sesión de SSH que invoca a Mosh, comprueba que la salida del comando locale contenga valores UTF-8 en las directivas LANG y LC_CTYPE antes de lanzar la conexión desde el dispositivo móvil.
Instalación de mosh-server en Alpine Linux con apk
Alpine Linux proporciona el paquete de Mosh a través de su gestor apk en la rama de paquetes principales. Dado que Alpine utiliza la biblioteca estándar musl en lugar de glibc, el soporte de UTF-8 viene integrado de forma predeterminada sin requerir la ejecución de generadores adicionales de locale.
apk update
apk add moshSi el sistema Alpine emplea nftables o iptables para restringir accesos, se debe añadir la regla para el protocolo UDP en el cortafuegos activo. Por ejemplo, mediante iptables directo:
iptables -A INPUT -p udp --dport 60000:61000 -j ACCEPT
rc-service iptables saveEs indispensable confirmar que el demonio sshd de OpenSSH esté activo en Alpine, pues Mosh no cuenta con un demonio persistente a la escucha; únicamente levanta un subproceso de mosh-server tras autenticar la llamada inicial por SSH.
Conexión móvil y persistencia con termi1
La aplicación termi1 para terminal móvil permite gestionar estas conexiones combinando Mosh con multiplexores de terminal para evitar la pérdida de procesos en segundo plano. Al alternar entre redes Wi-Fi y datos móviles en trayectos reales, Mosh conserva el socket abierto sin congelar la pantalla ni abortar ejecuciones prolongadas.
Para garantizar que los comandos permanezcan activos aunque se cierre la app móvil de forma forzada, se recomienda anclar la sesión a tmux dentro del servidor. Desde la interfaz móvil de termi1, el teclado especializado incorpora teclas físicas ausentes en teclados táctiles estándar (Esc, Ctrl, Tab y fila funcional F1-F12), agilizando el envío de señales a procesos remotos.
Las claves SSH generadas desde el dispositivo para la conexión inicial se almacenan en el enclave seguro del teléfono y no salen del hardware local. Además, el sistema de asistencia por comandos de termi1 opera bajo el modo Auto seguro o Production Guard para impedir la ejecución accidental de órdenes destructivas al trabajar sobre servidores en producción mediante conexiones celulares inestables.
Preguntas frecuentes
¿Por qué mosh-server necesita una conexión SSH previa?
Mosh utiliza OpenSSH en el puerto TCP 22 para autenticar al usuario y transferir de forma cifrada una clave simétrica temporal. Una vez autenticado, el proceso remoto arranca mosh-server en un puerto UDP y la comunicación interactiva se traslada fuera de SSH.
¿Cómo se especifica un puerto UDP concreto al iniciar Mosh?
El cliente Mosh admite el parámetro -p para definir un puerto UDP exacto en lugar del rango completo. Al ejecutar un comando con este argumento, mosh-server se enlaza únicamente al socket UDP seleccionado, reduciendo las aperturas requeridas en cortafuegos corporativos estrictos.
¿Qué ocurre si el servidor carece de un locale UTF-8 válido?
mosh-server aborta la ejecución con un error explícito si detecta codificaciones no compatibles como ASCII estándar o C. Mosh exige compatibilidad UTF-8 completa en ambos extremos para sincronizar de manera predecible el estado visual de la terminal entre dispositivos remotos.
¿Soporta mosh-server el reenvío de puertos TCP como SSH?
mosh-server no admite reenvío de puertos TCP, túneles dinámicos SOCKS ni reenvío del servidor gráfico X11. Su diseño sacrifica deliberadamente estas funciones de transporte genérico para maximizar la velocidad de respuesta en terminales sobre redes con latencia o pérdidas frecuentes de paquetes.