Mosh vs SSH: cuál es la diferencia

Mosh es una terminal para conexiones inestables. Inicia sesión con SSH y luego pasa a UDP, así que la sesión sobrevive a la suspensión, a cambios de red y a cortes, y muestra lo que escribes sin esperar al servidor. Necesita Mosh instalado en ambos extremos y los puertos UDP 60000 a 61000 abiertos, y no tiene reenvío de puertos ni scrollback. Para archivos, túneles y scripts sigues usando SSH.

Actualizada el . Mosh 1.4.0 entre dos contenedores desechables con Debian 13, incluido un corte de red de 6 segundos.

Lado a lado

SSHMosh
TransporteTCP, normalmente el puerto 22SSH para iniciar sesión, luego UDP
Cambio de red o de IP del clienteLa sesión se rompeLa sesión continúa
Escribir en un enlace lentoEspera al servidorMuestra lo escrito en local, mientras lo comprueba con el servidor
Requisitos en el servidorsshdsshd y mosh-server. No hace falta root
ScrollbackLo gestiona tu terminalSolo se sincroniza la pantalla visible
Reenvío de puertos, del agente y de X11SíNo
Copia de archivos, scriptsscp, sftp, ssh host commandNo sirve para esto. Es para terminales interactivas

Qué hace en la práctica

Abrimos una sesión de Mosh, quitamos de su red el contenedor cliente durante 6 segundos y lo volvimos a poner. Mosh mostró una barra arriba con Last reply 10 seconds ago. [To quit: Ctrl-^ .]. Después la sesión continuó en la misma shell, y un comando escrito a continuación se ejecutó con normalidad.

Una sesión SSH normal termina en una situación así si la red tarda lo suficiente en volver, o si cambia tu dirección IP. Mira Broken pipe y keepalive.

Instalación

Mosh tiene que estar instalado tanto en tu máquina como en el servidor:

sudo apt-get install mosh   # Debian, Ubuntu
brew install mosh           # macOS with Homebrew

Abre los puertos UDP

mosh-server toma el primer puerto UDP libre a partir del 60001. En nuestra prueba fue el 60001. Abre el rango en el firewall del servidor, por ejemplo con ufw:

sudo ufw allow 60000:61000/udp

Si ejecutas solo unas pocas sesiones, basta un rango menor. Si redirigues el TCP 22 en un router para llegar al servidor, redirige también estos puertos UDP. El sitio de Mosh señala como causa un firewall que bloquea UDP cuando no se recibe nada del servidor.

Conectar

mosh user@server
mosh --ssh="ssh -p 2222" user@server
mosh -p 60001 user@server

Usa --ssh para un puerto SSH distinto y -p para elegir el puerto UDP. -p no cambia el puerto SSH. Para salir de una sesión que ya no responde, pulsa Ctrl+^ y luego ..

Límites que debes esperar

  • Sin scrollback. Mosh solo sincroniza la pantalla visible. El propio consejo de Mosh es ejecutar tmux o screen en el servidor para tener historial. Mira la hoja de referencia de tmux. Para volver a la misma shell después de cerrar el cliente, mira mantener activa una sesión SSH con tmux.
  • Sin reenvíos. Si necesitas un túnel a la vez, ábrelo con un comando ssh aparte.
  • Solo UTF-8. Con un locale que no sea UTF-8, mosh-server se detiene con mosh-server needs a UTF-8 native locale to run.. Revisa locale en ambos lados.
  • UDP tiene que pasar. Las redes que solo permiten TCP no funcionarán.
  • No protege frente a un reinicio. mosh-server es un proceso normal del servidor, así que un reinicio lo termina.

La seguridad de la sesión procede de una clave que SSH intercambia al principio, tras lo cual el tráfico se cifra y se autentica con AES-128 en modo OCB3, según el sitio de Mosh.

Preguntas

¿Mosh es más rápido que SSH?

No en velocidad de transferencia. Mosh parece más rápido en conexiones lentas porque muestra al momento lo que escribes. Para copiar archivos o abrir túneles, la herramienta es SSH.

¿Qué puertos usa Mosh?

Inicia sesión por SSH, normalmente en el puerto TCP 22, y luego usa un puerto UDP entre 60000 y 61000 en el servidor, empezando por 60001.

¿Mosh sustituye a SSH?

No. Mosh usa SSH para iniciar sesión y arrancar mosh-server. Sigue usando SSH para copiar archivos, redirigir puertos y ejecutar scripts.

¿Qué significa mosh did not make a successful connection?

El UDP de tu equipo no llega a mosh-server. El mensaje completo termina con Please verify that UDP port 60001 is not firewalled and can reach the server. Abre 60000:61000/udp en el servidor y en el firewall de tu proveedor, y comprueba que tu red deja pasar el UDP.

Fuentes

Más en Sesiones y tmux

Todas las guías