Cosa ti serve
- Un server che accetta SSH, e il suo indirizzo.
- Un percorso di rete fino a lui. Un server di casa dietro un router richiede una VPN come Tailscale o una porta inoltrata: vedi SSH senza IP pubblico.
- Un client sul telefono: un'app SSH, o un'app terminale con un ambiente Linux.
- Una chiave creata per questo telefono. Non riutilizzare quella del portatile.
Come valutare un client SSH
Qualunque tu stia guardando, controlla questi punti:
- Controllo della chiave host. Deve mostrare il fingerprint alla prima connessione e fermarsi se cambia. È questo che ti protegge su una rete pubblica.
- Tipi di chiave. Deve generare e accettare chiavi Ed25519 con una passphrase.
- Dove sono conservate le chiavi. Le chiavi di Android Keystore restano non esportabili e possono richiedere il blocco schermo. Una chiave salvata come file si può copiare in backup, ma è sicura solo quanto lo spazio dell'app. Controlla anche se qualcosa viene caricato online, e se quel caricamento è cifrato sul dispositivo.
- Restare connessi. Un servizio in primo piano con una notifica visibile è il segno che l'app prende sul serio l'uso in background.
- Tastiera. Ctrl, Esc, Tab e le frecce devono essere raggiungibili, altrimenti tmux e vim sono penosi.
- Cos'altro ti serve. Jump host, inoltro di porta e SFTP non ci sono in tutte le app.
- Origine. Il codice open source e un'informativa sulla privacy chiara ti dicono cosa fa l'app con i tuoi dati. Questa app conterrà le chiavi dei tuoi server, quindi pretendilo.
Le chiavi su un telefono
Usa una chiave per dispositivo, con una passphrase. I telefoni si perdono, e con una chiave separata togli una riga da authorized_keys e ogni altro dispositivo continua a funzionare. Vedi come revocare una chiave. Usa anche un blocco schermo: un'app che ricorda la tua passphrase è sicura solo quanto il telefono sbloccato.
Genera la chiave sul telefono e sposta fuori solo la chiave pubblica. Copiare una chiave privata dal portatile tramite un'app di chat o una cartella cloud lascia copie che non puoi cancellare.
Perché la sessione muore in background
È un comportamento normale di Android, non un server rotto.
- Doze. Un telefono scollegato, fermo e con lo schermo spento impedisce alle app di usare la rete, tranne brevi finestre di manutenzione. Ignora anche i wake lock. Una lunga connessione SSH inattiva non sopravvive a tutto questo.
- Limiti in background. Un'app senza schermo visibile e senza servizio in primo piano viene limitata, e il lavoro asincrono si ferma quando esce dal primo piano.
- Impostazioni della batteria. Android ti permette di escludere un'app in Impostazioni, Batteria, Ottimizzazione della batteria. Alcuni produttori aggiungono regole più rigide, con nomi di menu diversi.
- Cambi di rete. Passare dal Wi-Fi ai dati mobili cambia il tuo indirizzo IP, e una semplice connessione SSH non lo sopravvive su nessun dispositivo.
Quindi dai per scontato che la connessione cadrà, e tieni il lavoro sul server. Usa tmux, e riconnettiti alla sessione dopo esserti ricollegato:
tmux new -A -s main
Vedi tenere vive le sessioni con tmux. Se ti sposti spesso tra reti diverse, leggi Mosh o SSH.
Vero OpenSSH su Android
Alcune app terminale open source per Android includono un ambiente Linux con un gestore di pacchetti, senza bisogno di root. Installale da una sola fonte: le versioni di store diversi possono essere firmate con chiavi diverse e non si aggiornano a vicenda.
Installa OpenSSH e crea una chiave:
pkg update
pkg install openssh
ssh-keygen -t ed25519 -C "android-phone"
Installala sul server e connettiti. Sono gli stessi comandi di qualsiasi macchina Linux:
ssh-copy-id user@server
ssh user@server
Per incollare la chiave a mano da qualche parte, stampala:
cat ~/.ssh/id_ed25519.pub
La tua chiave vive nello spazio privato dell'app, quindi disinstallare l'app la rimuove. Va bene con una chiave per dispositivo: aggiungine una nuova.
Doze ignora i wake lock, quindi per i lavori lunghi escludi l'app dall'ottimizzazione della batteria. Su Android 12 e successivi, il sistema può anche terminare i processi avviati da un'app, sopra un limite di sistema di 32 oppure quando usano troppa CPU in background. È un altro motivo per tenere i lavori lunghi sul server.
Domande
Posso eseguire un server SSH su Android?
Sì, in un'app terminale con un ambiente Linux: installa openssh ed esegui sshd. Deve ascoltare su una porta sopra la 1024, spesso la 8022, perché le app Android non possono aprire porte più basse senza root. Accedi con una chiave.
Fonti
- Doze e App Standby, Android Developers
- Attività in background, Android Developers
- Sistema Android Keystore, Android Developers