Lado a lado
| SSH | Mosh | |
|---|---|---|
| Transporte | TCP, normalmente el puerto 22 | SSH para iniciar sesión, luego UDP |
| Cambio de red o de IP del cliente | La sesión se rompe | La sesión continúa |
| Escribir en un enlace lento | Espera al servidor | Muestra lo escrito en local, mientras lo comprueba con el servidor |
| Requisitos en el servidor | sshd | sshd y mosh-server. No hace falta root |
| Scrollback | Lo gestiona tu terminal | Solo se sincroniza la pantalla visible |
| Reenvío de puertos, del agente y de X11 | Sí | No |
| Copia de archivos, scripts | scp, sftp, ssh host command | No 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
sshaparte. - Solo UTF-8. Con un locale que no sea UTF-8,
mosh-serverse detiene conmosh-server needs a UTF-8 native locale to run.. Revisalocaleen ambos lados. - UDP tiene que pasar. Las redes que solo permiten TCP no funcionarán.
- No protege frente a un reinicio.
mosh-serveres 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.