Cómo conectarte por SSH desde un teléfono Android

Instala un cliente SSH, o una app de terminal con entorno Linux si quieres los comandos reales de OpenSSH, genera una clave en el teléfono y añade su clave pública al servidor. En una app así: pkg install openssh, ssh-keygen -t ed25519, ssh-copy-id user@server y luego ssh user@server. Ejecuta tmux en el servidor, porque Android puede suspender la conexión en segundo plano.

Actualizada el .

Lo que necesitas

  • Un servidor que acepte SSH, y su dirección.
  • Un camino de red hasta él. Un servidor doméstico detrás de un router necesita una VPN como Tailscale o un puerto reenviado: consulta SSH sin IP pública.
  • Un cliente en el teléfono: una app SSH, o una app de terminal con entorno Linux.
  • Una clave hecha para este teléfono. No reutilices la de tu portátil.

Cómo juzgar un cliente SSH

Mires el que mires, comprueba estos puntos:

  • Comprobación de la clave de host. Debe mostrar la huella en la primera conexión y detenerse si cambia. Esto es lo que te protege en una red pública.
  • Tipos de clave. Debe generar y aceptar claves Ed25519 con frase de contraseña.
  • Dónde se guardan las claves. Las claves de Android Keystore siguen siendo no exportables y pueden exigir el bloqueo de pantalla. Una clave guardada como archivo se puede copiar, pero solo es tan segura como el almacenamiento de la app. Comprueba también si se sube algo, y si esa subida está cifrada en el dispositivo.
  • Mantener la conexión. Un servicio en primer plano con una notificación visible es la señal de que la app se toma en serio el uso en segundo plano.
  • Teclado. Ctrl, Esc, Tab y las flechas deben estar al alcance, o tmux y vim se hacen penosos.
  • Qué más necesitas. Jump hosts, reenvío de puertos y SFTP no están en todas las apps.
  • Código. Un código abierto y una política de privacidad clara te dicen qué hace la app con tus datos. Esta app guardará claves de tus servidores, así que exígelo.

Claves en un teléfono

Usa una clave por dispositivo, con frase de contraseña. Los teléfonos se pierden, y con una clave aparte quitas una línea de authorized_keys y todos los demás dispositivos siguen funcionando. Consulta cómo revocar una clave. Usa también un bloqueo de pantalla: una app que recuerda tu frase de contraseña es tan segura como el teléfono desbloqueado.

Genera la clave en el teléfono y saca de él solo la clave pública. Copiar una clave privada desde tu portátil por una app de mensajería o una carpeta en la nube deja copias que no puedes borrar.

Por qué la sesión muere en segundo plano

Es un comportamiento normal de Android, no un servidor roto.

  • Doze. Un teléfono desenchufado, quieto y con la pantalla apagada impide que las apps usen la red, salvo breves ventanas de mantenimiento. También ignora los wake locks. Una conexión SSH inactiva durante mucho tiempo no sobrevivirá a esto.
  • Límites en segundo plano. Una app sin pantalla visible y sin servicio en primer plano queda restringida, y el trabajo asíncrono se detiene cuando sale de primer plano.
  • Ajustes de batería. Android te deja eximir una app en Ajustes, Batería, Optimización de batería. Algunos fabricantes añaden reglas propias más estrictas, con otros nombres de menú.
  • Cambios de red. Pasar de Wi-Fi a datos móviles cambia tu dirección IP, y una conexión SSH normal no sobrevive a eso en ningún dispositivo.

Así que da por hecho que la conexión se caerá, y deja el trabajo en el servidor. Ejecuta tmux y vuelve a conectarte a la sesión después de reconectar:

tmux new -A -s main

Consulta mantener las sesiones vivas con tmux. Si te mueves mucho entre redes, lee Mosh o SSH.

OpenSSH real en Android

Algunas apps de terminal de código abierto para Android incluyen un entorno Linux con gestor de paquetes, sin necesidad de root. Instálalas desde un solo origen: las compilaciones de tiendas distintas pueden estar firmadas con claves diferentes y no se actualizan entre sí.

Instala OpenSSH y crea una clave:

pkg update
pkg install openssh
ssh-keygen -t ed25519 -C "android-phone"

Instálala en el servidor y conéctate. Son los mismos comandos que en cualquier máquina Linux:

ssh-copy-id user@server
ssh user@server

Para pegar la clave en algún sitio a mano, imprímela:

cat ~/.ssh/id_ed25519.pub

Tu clave vive en el almacenamiento privado de la app, así que desinstalar la app la elimina. No pasa nada con una clave por dispositivo: añade una nueva.

Doze ignora los wake locks, así que exime a la app de la optimización de batería para los trabajos largos. En Android 12 y posteriores, el sistema también puede matar los procesos iniciados por una app, ya sea por encima de un límite global de 32 o cuando usan demasiada CPU en segundo plano. Es otro motivo para dejar los trabajos largos en el servidor.

Preguntas

¿Puedo ejecutar un servidor SSH en Android?

Sí, en una app de terminal con entorno Linux: instala openssh y ejecuta sshd. Tiene que escuchar en un puerto por encima de 1024, a menudo el 8022, porque las apps de Android no pueden abrir puertos más bajos sin root. Inicia sesión con una clave.

Fuentes

Más en SSH desde el móvil

Todas las guías