Cómo conectarse por SSH desde un iPhone

Instala una app cliente de SSH, indícale la dirección, el puerto y el usuario del servidor, y entra con una clave creada para el móvil. El servidor debe ser accesible desde la red del teléfono, directamente o a través de una VPN. Ejecuta tmux en el servidor, porque iOS suspende las apps en segundo plano y la conexión se cortará. tmux mantiene tu trabajo en marcha hasta que vuelvas.

Actualizada el . Los comandos del servidor (tmux, ssh-keygen -lf, y restrict,pty y from= en authorized_keys) se ejecutaron con OpenSSH 10.0 en Debian 13 dentro de un contenedor desechable, conectando desde macOS.

Qué necesitas

  • Un servidor que acepte SSH, con su dirección, el puerto (22 salvo que lo hayas cambiado) y el nombre de usuario.
  • Un camino de red desde el teléfono. Un servidor con dirección pública funciona desde cualquier sitio. Uno en casa o en una oficina normalmente no, como se explica abajo.
  • Una clave en el teléfono, o una contraseña si el servidor todavía la permite.
  • Una app cliente de SSH. iOS no incluye ninguna.

Cómo llegar a un servidor privado

Un teléfono con datos móviles no está en la red de tu casa ni de tu oficina, así que las direcciones 192.168.x.x darán timeout. Hay dos formas de entrar:

  • VPN o red superpuesta (recomendado). Pon el teléfono y el servidor en la misma red privada con WireGuard o una herramienta similar. Así el puerto 22 no tiene por qué estar expuesto a internet.
  • Reenvío de puertos en el router. Esto expone SSH a todo internet, y no funciona si tu proveedor te pone detrás de un CGNAT. Si lo haces, desactiva antes el acceso con contraseña. Mira cómo desactivar el acceso con contraseña.

Una conexión que se queda colgada y falla apunta a un problema de red, no de autenticación. Mira Connection timed out.

Claves en un teléfono

Crea una clave nueva en el teléfono, dentro de la app, y no copies allí la clave privada de tu portátil. Copiarla significa que la clave pasa por el correo, los mensajes o una carpeta en la nube, y si pierdes el teléfono tendrás que cambiarla en todos los sitios donde la uses.

Con una clave por dispositivo, borras una línea de authorized_keys y el teléfono queda fuera, mientras tu portátil sigue funcionando. Elige Ed25519 y pon una frase de contraseña si la app lo permite.

Copia la clave pública de la app al servidor, desde una sesión que ya tengas:

echo 'ssh-ed25519 AAAA...your-public-key... iphone' >> ~/.ssh/authorized_keys

Puedes limitar lo que esa clave puede hacer. Esta línea permite un terminal pero no túneles ni reenvíos, y solo acepta la clave desde un rango de direcciones de la VPN, así que una clave robada vale menos:

from="10.0.0.0/24",restrict,pty ssh-ed25519 AAAA...your-public-key... iphone

En nuestra prueba la clave entró desde una dirección que coincidía y fue rechazada desde otra, con los reenvíos bloqueados. Quita from= si tu teléfono no tiene un rango fijo.

Comprueba la huella en la primera conexión

La primera vez, la app muestra la huella de la clave del servidor. Compárala con la real, desde una sesión de confianza:

ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

Esto importa más en un teléfono, porque con más frecuencia estás en redes que no controlas. Lee cómo funciona known_hosts.

Por qué se corta la conexión y qué hacer

iOS suspende las apps poco después de que salen de la pantalla, y una app suspendida no puede mantener su conexión de red. Puede pedir una prórroga corta, pero es el sistema quien decide cuánto dura. Si la app no sabe seguir conectada en segundo plano, unos minutos en otra app o el teléfono bloqueado bastan para perder la sesión. Un cambio de red, como pasar de Wi-Fi a datos móviles, también rompe una conexión SSH normal. Los ajustes de keep-alive no arreglan ninguno de los dos casos.

Así que no luches contra ello. Ejecuta tu trabajo dentro de tmux en el servidor y vuelve a conectarte a la sesión tras cada reconexión:

tmux new -A -s phone

Los programas que corren dentro siguen funcionando mientras el teléfono no está. Los detalles están en cómo mantener las sesiones vivas con tmux. No lances desde un teléfono un trabajo largo fuera de tmux.

Terminal de iPhone conectado a un servidor de prueba etiquetado Production, con un listado de directorio y una fila de teclas para Esc, Tab, Ctrl y flechas

Mosh es la otra respuesta a una red que cambia. Lee Mosh vs SSH: cuál es la diferencia antes de instalarlo en el servidor.

Cómo elegir una app

  • Teclas extra. Esc, Tab, Ctrl y las flechas deben estar a un toque. El teclado de iOS no tiene ninguna.
  • Claves. Debe generar claves Ed25519 y dejarte ver la clave pública y poner una frase de contraseña.
  • Comprobación de la clave del host. Debe mostrar la huella en la primera conexión y detenerse cuando cambie.
  • Dónde se guardan los secretos. Busca el llavero de iOS (Keychain) o un cifrado fuerte, y lee lo que dice el fabricante sobre la sincronización.
  • Bloqueo de la app. Si alguien más puede llegar a tener tu teléfono desbloqueado, importa un bloqueo de la app con Face ID o con un código.
  • Reconexión. Comprueba si sigue conectada en segundo plano, si se reconecta sola y si puede ejecutar un comando, como la línea de tmux de arriba, después de entrar. Algunas apps ofrecen Mosh, un protocolo aparte que sobrevive a los cambios de red y necesita un componente en el servidor.
  • Calidad del terminal. Prueba tmux y vim antes de depender de ella.

Preguntas

¿El iPhone tiene un cliente SSH integrado?

No. iOS no tiene terminal ni comando ssh, así que una sesión interactiva necesita una app cliente SSH. La app Atajos solo puede ejecutar un script por SSH.

¿Por qué se desconecta mi sesión SSH en el iPhone?

iOS suspende las apps poco después de que salen de la pantalla, y una app suspendida no puede mantener la conexión. Trabaja en tmux en el servidor y vuelve a engancharte, o usa Mosh para los cambios de red.

¿Puedo entrar con una clave SSH desde un iPhone?

Sí. Crea una clave Ed25519 en la app SSH y añade su clave pública a authorized_keys en el servidor. Usa una clave por dispositivo: un teléfono perdido se excluye quitando una línea.

Fuentes

Más en SSH desde el móvil

Todas las guías