Comment se connecter en SSH depuis un téléphone Android

Installez un client SSH, ou une app de terminal avec un environnement Linux si vous voulez les vraies commandes OpenSSH, générez une clé sur le téléphone et ajoutez sa clé publique au serveur. Dans une telle app : pkg install openssh, ssh-keygen -t ed25519, ssh-copy-id user@server, puis ssh user@server. Lancez tmux sur le serveur, car Android peut suspendre la connexion en arrière-plan.

Mis à jour le .

Ce qu'il vous faut

  • Un serveur qui accepte SSH, et son adresse.
  • Un chemin réseau jusqu'à lui. Un serveur à la maison derrière un routeur demande un VPN comme Tailscale ou un port redirigé : voir SSH sans adresse IP publique.
  • Un client sur le téléphone : une app SSH, ou une app de terminal avec un environnement Linux.
  • Une clé créée pour ce téléphone. Ne réutilisez pas celle de votre portable.

Comment juger un client SSH

Quel que soit celui que vous examinez, vérifiez ces points :

  • Vérification de la clé d'hôte. Il doit afficher l'empreinte à la première connexion et s'arrêter si elle change. C'est ce qui vous protège sur un réseau public.
  • Types de clés. Il doit générer et accepter des clés Ed25519 avec une phrase secrète.
  • Où les clés sont conservées. Les clés d'Android Keystore restent non exportables et peuvent exiger le verrouillage d'écran. Une clé stockée dans un fichier peut être sauvegardée, mais elle n'est aussi sûre que le stockage de l'app. Vérifiez aussi si quelque chose est envoyé en ligne, et si cet envoi est chiffré sur l'appareil.
  • Rester connecté. Un service au premier plan avec une notification visible montre que l'app prend l'usage en arrière-plan au sérieux.
  • Clavier. Ctrl, Échap, Tab et les flèches doivent être accessibles, sinon tmux et vim sont pénibles.
  • Ce dont vous avez besoin d'autre. Les hôtes de rebond, la redirection de port et SFTP ne sont pas dans toutes les apps.
  • Source. Un code source ouvert et une politique de confidentialité claire vous disent ce que l'app fait de vos données. Cette app détiendra les clés de vos serveurs : demandez donc cela.

Les clés sur un téléphone

Utilisez une clé par appareil, avec une phrase secrète. Les téléphones se perdent, et avec une clé distincte vous retirez une seule ligne d'authorized_keys et tous les autres appareils continuent de fonctionner. Voir comment révoquer une clé. Utilisez aussi un verrouillage d'écran : une app qui mémorise votre phrase secrète n'est aussi sûre que le téléphone déverrouillé.

Générez la clé sur le téléphone et n'en sortez que la clé publique. Copier une clé privée depuis votre portable via une messagerie ou un dossier dans le cloud laisse des copies que vous ne pouvez pas supprimer.

Pourquoi la session meurt en arrière-plan

C'est un comportement normal d'Android, pas un serveur défaillant.

  • Doze. Un téléphone débranché, immobile et écran éteint empêche les apps d'utiliser le réseau, hormis de brèves fenêtres de maintenance. Il ignore aussi les wake locks. Une longue connexion SSH inactive n'y survivra pas.
  • Limites en arrière-plan. Une app sans écran visible et sans service au premier plan est restreinte, et le travail asynchrone s'arrête quand elle quitte le premier plan.
  • Réglages de batterie. Android permet d'exempter une app dans Paramètres, Batterie, Optimisation de la batterie. Certains fabricants ajoutent leurs propres règles, plus strictes, sous d'autres noms de menus.
  • Changements de réseau. Passer du Wi-Fi aux données mobiles change votre adresse IP, et une connexion SSH simple n'y survit sur aucun appareil.

Partez donc du principe que la connexion tombera, et gardez le travail sur le serveur. Lancez tmux, et rattachez-vous après la reconnexion :

tmux new -A -s main

Voir garder les sessions actives avec tmux. Si vous passez souvent d'un réseau à l'autre, lisez Mosh ou SSH.

Le vrai OpenSSH sur Android

Certaines apps de terminal open source pour Android incluent un environnement Linux avec un gestionnaire de paquets, sans besoin de root. Installez-les depuis une seule source : les versions de boutiques différentes peuvent être signées avec des clés différentes et ne se mettent pas à jour entre elles.

Installez OpenSSH et créez une clé :

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

Installez-la sur le serveur et connectez-vous. Ce sont les mêmes commandes que sur n'importe quelle machine Linux :

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

Pour coller la clé quelque part à la main, affichez-la :

cat ~/.ssh/id_ed25519.pub

Votre clé vit dans le stockage privé de l'app : désinstaller l'app la supprime. Ce n'est pas grave avec une clé par appareil : ajoutez-en une nouvelle.

Doze ignore les wake locks : pour les longues tâches, exemptez l'app de l'optimisation de la batterie. Sur Android 12 et les versions suivantes, le système peut aussi tuer les processus lancés par une app, soit au-delà d'une limite globale de 32, soit quand ils consomment trop de CPU en arrière-plan. C'est une raison de plus de garder les longues tâches sur le serveur.

Questions

Puis-je faire tourner un serveur SSH sur Android ?

Oui, dans une app de terminal avec un environnement Linux : installez openssh et lancez sshd. Il doit écouter sur un port supérieur à 1024, souvent 8022, car les apps Android ne peuvent pas ouvrir de ports plus bas sans root. Connectez-vous avec une clé.

Sources

Autres guides : SSH depuis un téléphone

Tous les guides