Transfert d'agent SSH sur iOS : NeoServer permet de conserver votre clé privée en toute sécurité sur l'iPhone
Index
Quiconque a déjà exécuté git clone sur un serveur distant a rencontré le même problème : comment cette machine doit-elle s'authentifier auprès de GitHub ? Les solutions courantes sont toutes mauvaises. Si vous copiez votre clé privée sur le serveur, une fois celui-ci compromis, tous vos actifs seront exposés à un risque de fuite de clé privée. Si vous créez des clés de déploiement (deploy key) jetables pour chaque dépôt, vous vous enfoncez dans le bourbier d'une gestion des clés fastidieuse. Si vous optez pour le compromis d'utiliser HTTPS avec un jeton d'accès personnel (personal access token), ce jeton sera alors stocké en clair sur le disque, dans le fichier .git-credentials.
SSH agent forwarding (transfert d'agent SSH) est la solution parfaite à ce problème, et NeoServer l'apporte enfin de manière optimale sur la plateforme iOS : votre clé privée ne quitte jamais votre iPhone, mais le serveur distant peut l'« emprunter » temporairement pour tirer du code, pousser des commits ou sauter vers l'hôte suivant.
Ce que fait réellement le SSH Agent Forwarding
L'agent SSH est un processus qui conserve vos clés privées déchiffrées en mémoire et répond aux demandes d'authentification en votre nom. Le transfert d'agent (correspondant au paramètre -A dans la CLI OpenSSH) étend cette fonctionnalité à travers les connexions : lorsque vous vous connectez en SSH depuis votre iPhone vers un serveur en activant le transfert, le serveur obtient un socket qui renvoie les requêtes d'authentification par proxy à l'agent de votre téléphone.
Le résultat pratique est le suivant :
- Sur le serveur distant, exécuter
git clone [email protected]:you/private-repo.gitfonctionne directement — la demande d'authentification de GitHub sera traitée par la clé stockée sur votre iPhone. - Exécuter
ssh production-db.internaldepuis un serveur bastion fonctionne également, sans qu'aucune clé ne soit stockée sur le bastion. - La clé privée elle-même n'apparaît jamais sur le serveur distant. Ni sur le disque, ni en mémoire (à l'exception de la requête d'authentification transférée). Même si ce serveur est compromis demain, l'attaquant n'y trouvera aucune clé à voler.
Pourquoi c'est particulièrement important sur iOS
Sur un ordinateur portable, vous pouvez utiliser ssh-agent, ~/.ssh/config et la mémoire musculaire acquise au fil des années. Mais sur un téléphone, la plupart des applications SSH ne prennent pas du tout en charge le transfert d'agent, ou l'implémentent de manière très maladroite, ce qui pousse les utilisateurs vers des raccourcis peu sûrs, comme coller la clé dans le terminal ou stocker des jetons dans des fichiers. NeoServer considère le transfert d'agent comme une fonctionnalité de base, et non comme un correctif ajouté à la hâte :
- Chargez votre clé privée dans NeoServer une seule fois. Elle est chiffrée et stockée localement sur l'appareil, protégée par Face ID / Touch ID.
- Activez le transfert d'agent individuellement pour chaque connexion. Lorsque vous établissez une connexion, NeoServer transfère son agent intégré vers la session distante.
- Utilisez
git,scpetsshsur le serveur distant comme sur votre ordinateur portable — les identifiants transférés répondent de manière transparente à toutes les requêtes d'authentification.
Session type : cloner un dépôt privé depuis une machine de développement distante
C'est précisément le flux de travail pour lequel le transfert d'agent a été conçu à l'origine.
- Sur votre iPhone, en utilisant NeoServer, activez l'agent forwarding, et connectez-vous en SSH à votre serveur de développement.
- Sur ce serveur, exécutez
git clone [email protected]:yourorg/infra.git. GitHub lance une demande d'authentification ; cette demande est renvoyée vers la clé sur votre iPhone et automatiquement validée. - Le clonage du dépôt est terminé. Tout au long de ce processus, votre clé privée, votre mot de passe GitHub ou votre jeton d'accès personnel n'ont jamais été écrits sur le serveur de développement.
Le même principe s'applique à git pull, git push, à la communication avec des dépôts privés via SSH, ainsi qu'au saut vers un second serveur. Une seule authentification sur votre téléphone, pour se connecter à d'innombrables serveurs, avec zéro copie de clé.
Chaînage d'hôtes : du bastion au réseau interne
Le transfert d'agent prend en charge l'utilisation combinée. Activez le transfert pour vous connecter au bastion, puis connectez-vous du bastion à un hôte interne — l'authentification de l'hôte interne sera toujours traitée par la clé sur votre téléphone. Vous bénéficiez ainsi de la sécurité offerte par le bastion (les hôtes internes ne sont pas directement exposés à l'extérieur), tout en vous épargnant les coûts de configuration des identifiants généralement requis sur le bastion. NeoServer prend également en charge la configuration Jump Server (serveur de rebond), de sorte que l'action de « rebondir via un bastion » peut elle-même être enregistrée sous forme de configuration de connexion unique.
Combiné avec Mosh et tmux, pour un véritable flux de travail mobile
Le transfert d'agent concerne la sécurité des identifiants ; les autres fonctionnalités de NeoServer gèrent la stabilité de la connexion :
- Mosh maintient la session active lors des transitions réseau, de sorte qu'un iPhone en mouvement n'interrompra pas le canal transféré.
tmux/zellijgarantissent que votre shell continue de s'exécuter côté serveur. Les opérationsgit clonede longue durée ou les déploiements continuent de s'exécuter même si le téléphone dans votre poche passe en veille.- SFTP vous permet de parcourir et de modifier les fichiers que vous venez de cloner directement dans l'application, avec coloration syntaxique, sans avoir à changer d'application.
Précautions de sécurité à clarifier absolument
- La fonctionnalité de transfert d'agent est très puissante, mais une grande puissance s'accompagne d'une règle stricte : activez cette fonctionnalité uniquement sur les serveurs en lesquels vous avez confiance. Pendant que votre session est ouverte, un serveur compromis avec le transfert activé pourrait demander à votre agent de s'authentifier auprès d'autres hôtes. C'est précisément pour cette raison que NeoServer l'a conçu comme un interrupteur activé indépendamment pour chaque connexion — utilisez-le sur vos propres serveurs de développement, et laissez-le désactivé sur les hôtes partagés ou non fiables.
- Votre clé privée est stockée localement sur votre iPhone et synchronisée uniquement via votre iCloud privé. NeoServer ne contient aucune analyse tierce ni réseau publicitaire, et l'application est protégée par un verrou Face ID / Touch ID.
- Combinée à l'authentification par 2FA (authentification à deux facteurs) et par clé privée, la redirection d'agent forme conjointement un système de défense à plusieurs niveaux : ce que vous possédez (la clé sur votre téléphone), la capacité que le serveur peut emprunter temporairement (l'agent transféré) et un facteur de vérification supplémentaire lors de la connexion.
À qui cela s'adresse-t-il ?
- Aux développeurs qui ont besoin de cloner des dépôts privés sur des machines de développement distantes et des serveurs CI.
- Aux ingénieurs DevOps qui ont besoin de rebondir via un bastion pour atteindre des hôtes internes.
- À tous ceux qui ont déjà été tentés, « juste pour cette fois », de faire un
scpde leur clé privée. - Aux équipes souhaitant obtenir un « zéro clé stockée » sur des infrastructures partagées.
Si, par le passé, pour vous authentifier depuis un serveur distant, vous avez toujours dû faire un compromis entre sécurité et commodité, le SSH agent forwarding élimine totalement ce compromis — et NeoServer vous permet de le faire directement depuis votre iPhone. Recherchez NeoServer sur l'App Store, ou téléchargez-le directement depuis l'App Store.