Cosa ti serve
- Un server che accetta SSH, con il suo indirizzo, la porta (22 se non l'hai cambiata) e il nome utente.
- Un percorso di rete dal telefono. Un server con indirizzo pubblico funziona da ovunque. Un server a casa o in ufficio di solito no, come spiegato sotto.
- Una chiave sul telefono, oppure una password se il server la accetta ancora.
- Un'app client SSH. iOS non ne include una.
Raggiungere un server privato
Un telefono con i dati mobili non è nella rete di casa o dell'ufficio, quindi gli indirizzi 192.168.x.x vanno in timeout. Ci sono due modi per entrare:
- VPN o rete overlay (consigliata). Metti telefono e server nella stessa rete privata con WireGuard o uno strumento simile. In questo modo la porta 22 non deve essere esposta a internet.
- Inoltro di porta sul router. Espone SSH a tutto internet e non funziona se il provider ti mette dietro un CGNAT (carrier-grade NAT). Se lo fai, disattiva prima l'accesso con password. Vedi come disattivare l'accesso con password.
Una connessione che resta appesa e poi fallisce indica un problema di rete, non di login. Vedi Connection timed out.
Le chiavi su un telefono
Crea una chiave nuova sul telefono, dentro l'app, e non copiare la chiave privata del portatile. Copiarla significa farla passare da email, messaggi o una cartella cloud, e se perdi il telefono devi sostituire quella chiave ovunque la usi.
Con una chiave per ogni dispositivo, togli una riga da authorized_keys e il telefono resta fuori, mentre il portatile continua a funzionare. Scegli Ed25519 e imposta una passphrase se l'app lo permette.
Copia la chiave pubblica dell'app sul server, usando una sessione che hai già:
echo 'ssh-ed25519 AAAA...your-public-key... iphone' >> ~/.ssh/authorized_keys
Puoi limitare ciò che quella chiave può fare. Questa riga consente un terminale ma niente tunnel né inoltri, e accetta la chiave solo da un intervallo di indirizzi della VPN, così una chiave rubata vale meno:
from="10.0.0.0/24",restrict,pty ssh-ed25519 AAAA...your-public-key... iphone
Nel nostro test la chiave ha fatto accedere da un indirizzo corrispondente ed è stata rifiutata da un altro, con gli inoltri bloccati. Togli from= se il tuo telefono non ha un intervallo fisso.
Controlla l'impronta alla prima connessione
La prima volta l'app mostra l'impronta (fingerprint) della chiave del server. Confrontala con quella vera, da una sessione di cui ti fidi già:
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
Su un telefono conta ancora di più, perché ti trovi più spesso su reti che non controlli. Leggi come funziona known_hosts.
Perché la connessione cade e cosa fare
iOS sospende le app poco dopo che escono dallo schermo, e un'app sospesa non può mantenere attiva la sua connessione di rete. Può chiedere una breve proroga, ma è il sistema a decidere quanto dura. Se l'app non sa restare collegata in background, passare a un'altra app per qualche minuto o bloccare il telefono chiude la sessione. Anche un cambio di rete, come da Wi-Fi a dati mobili, interrompe una normale connessione SSH. Le impostazioni di keep-alive non risolvono nessuno dei due casi.
Quindi non combatterlo. Esegui il tuo lavoro dentro tmux sul server e riattaccati dopo ogni riconnessione:
tmux new -A -s phone
I programmi al suo interno restano in esecuzione mentre il telefono è lontano. I dettagli sono in come mantenere vive le sessioni con tmux. Da un telefono non avviare un lavoro lungo fuori da tmux.

Mosh è l'altra risposta a una rete che cambia. Leggi Mosh o SSH: qual è la differenza prima di installarlo sul server.
Come scegliere un'app
- Tasti extra. Esc, Tab, Ctrl e le frecce devono essere a un tocco di distanza. La tastiera di iOS non ne ha nessuno.
- Chiavi. Deve generare chiavi Ed25519 e farti vedere la chiave pubblica e impostare una passphrase.
- Controllo della chiave dell'host. Deve mostrare l'impronta alla prima connessione e fermarsi quando cambia.
- Dove sono custoditi i segreti. Cerca il Keychain di iOS o una cifratura forte, e leggi cosa dice il produttore sulla sincronizzazione.
- Blocco dell'app. Se qualcun altro può mai avere in mano il tuo telefono sbloccato, un blocco dell'app con Face ID o un codice è importante.
- Riconnessione. Verifica se resta collegata in background, se si riconnette da sola e se può eseguire un comando come la riga tmux qui sopra dopo il login. Alcune app offrono Mosh, un protocollo separato che sopravvive ai cambi di rete e richiede un componente sul server.
- Qualità del terminale. Prova tmux e vim al suo interno prima di fidarti.
Domande
L'iPhone ha un client SSH integrato?
No. iOS non ha un terminale né il comando ssh, quindi per una sessione interattiva serve un'app client SSH. L'app Comandi può solo eseguire uno script via SSH.
Perché la sessione SSH su iPhone si disconnette?
iOS sospende le app poco dopo che escono dallo schermo, e un'app sospesa non può tenere aperta la connessione. Lavora in tmux sul server e ricollegati, oppure usa Mosh per i cambi di rete.
Posso accedere con una chiave SSH da iPhone?
Sì. Crea una chiave Ed25519 nell'app SSH e aggiungi la sua chiave pubblica ad authorized_keys sul server. Usa una chiave per dispositivo, così un telefono perso si esclude togliendo una riga.
Fonti
- sshd(8), formato di authorized_keys, manuale OpenBSD
- tmux(1), manuale OpenBSD
- Extending your app's background execution time, Apple Developer
- WireGuard