Sécurité

    Partager des identifiants SSH en toute sécurité avec un lien qui expire

    Préférez la clé publique du destinataire. Pour une clé privée ou un mot de passe : lien à usage unique qui expire, hôte et nom d’utilisateur à part.

    LinkPilot Team · Les personnes qui développent et exploitent LinkPilot chez TetraCore, LLC · À propos de LinkPilot

    Quelqu’un doit se connecter à un serveur ce soir, et l’identifiant doit lui parvenir maintenant. La tentation est de coller la clé privée ou le mot de passe root dans Slack. Chaque message par lequel passe cette clé en garde une copie. La meilleure voie est donc un lien à usage unique qui expire : le secret est récupéré une fois, puis il disparaît.

    Le lien n’est toutefois que l’étape de livraison. Avant de le créer, choisissez le bon identifiant à envoyer, limitez-le à la tâche et décidez comment vous le retirerez. Ce guide couvre tout cela, y compris la question de ce qu’il faut mettre dans un lien à usage unique pour partager des accès à un serveur, et de ce qu’il faut laisser en dehors.

    Quel identifiant SSH partagez-vous réellement ?

    Un accès SSH peut reposer sur quatre éléments différents, et chacun obéit à des règles de partage très différentes.

    IdentifiantCe que c’estDoit-il circuler ?
    Clé publiqueLa moitié que stocke le serveurOui, librement. Elle n’est pas secrète.
    Clé privéeLa moitié que détient l’utilisateurSeulement si elle a été générée pour le destinataire, et une seule fois
    Mot de passeUne chaîne partagée que vérifie le serveurUne fois, comme valeur temporaire que vous changerez
    Certificat SSHUne clé signée par votre autorité de certification, avec une période de validitéLe certificat n’est pas secret, la clé qui le sous-tend l’est

    La meilleure transmission est celle où rien de secret ne circule. Si le destinataire possède déjà une paire de clés SSH, demandez-lui sa clé publique, ajoutez-la à ~/.ssh/authorized_keys sur le bon compte et dites-lui de se connecter. Supprimer cette seule ligne plus tard met fin à son accès.

    Générez une clé dédiée pour lui s’il n’en a pas et ne peut pas en créer. N’envoyez jamais votre propre clé privée de tous les jours. Une clé créée pour le destinataire peut être limitée, journalisée et supprimée sans toucher à rien d’autre.

    Préférez les certificats ou un accès géré pour les besoins récurrents. Si la même personne aura besoin d’un accès à plusieurs reprises, des transmissions à usage unique répétées ne sont pas le bon outil. Un certificat SSH de courte validité, ou un outil d’accès comme Teleport ou Tailscale SSH, intègre l’expiration à l’identifiant lui-même au lieu de la greffer sur la livraison.

    Limiter l’identifiant avant de le partager

    Quoi que vous envoyiez, réduisez-le au strict nécessaire pour la tâche :

    • Un compte, un hôte. Ajoutez la clé au compte de service chargé du travail, pas à root, et uniquement sur la machine concernée.
    • Restreignez ce que la clé peut faire avec des options de authorized_keys comme from="203.0.113.5", no-port-forwarding ou une enveloppe command= quand la tâche se résume à un seul script.
    • Donnez une durée de vie au mot de passe. Si vous partagez un mot de passe, utilisez passwd -e ou l’équivalent de la plateforme pour que le destinataire doive le changer à la première connexion, et prévoyez de désactiver le compte à une date fixée.
    • Notez la date de fin avant d’envoyer quoi que ce soit. « Quand le travail sera fini » n’est pas une date.
    1. Confirmez l’identité du destinataire par un canal en qui vous avez déjà confiance : le ticket, un fil d’e-mails connu ou un appel. La plupart des identifiants envoyés à la mauvaise personne le sont à cause d’une adresse ressemblante ou d’un nom rempli automatiquement.
    2. Collez uniquement le secret dans l’outil de liens secrets à usage unique. Pour une clé privée, cela signifie le bloc PEM complet et rien d’autre. Avec LinkPilot, le texte est chiffré dans votre navigateur avant d’être stocké : le service ne détient jamais que du texte chiffré, et la clé qui permet de le déchiffrer se trouve dans la partie de l’URL que les navigateurs n’envoient pas aux serveurs.
    3. Réglez l’expiration sur la fenêtre réelle. Une heure si la personne attend, 24 heures si elle est dans un autre fuseau horaire, sept jours seulement s’il y a une vraie raison. Le lien est aussi détruit dès sa première ouverture : l’expiration est le filet de sécurité, pas le contrôle principal.
    4. Ajoutez une phrase de passe avec un compte Pro quand l’identifiant est sensible, et transmettez la phrase de passe par un autre canal. Avec le forfait Pro, l’historique d’audit vous indique aussi à quel moment l’affichage a eu lieu.
    5. Envoyez le lien avec une ligne expliquant son objet, sans aucun détail de connexion.
    6. Envoyez les détails de connexion dans un message séparé : hôte ou adresse, port, nom d’utilisateur et méthode d’authentification. Aucun de ces éléments n’est secret à lui seul, mais avec la clé, ils forment l’accès complet.

    Si le lien indique qu’il a déjà été ouvert et que le destinataire dit ne pas l’avoir fait, ne discutez pas. Considérez l’identifiant comme exposé, supprimez la clé ou changez le mot de passe, et générez-en un nouveau.

    La question de ce qui doit figurer dans le secret revient à chaque fois. Une bonne règle : le lien contient ce qu’un attaquant ne pourrait pas deviner, et le message ordinaire contient ce qu’il pourrait deviner.

    Dans le lien à usage unique :

    • La clé privée, ou le mot de passe temporaire
    • La phrase de passe de la clé, si une phrase de passe a été définie à la génération
    • Rien d’autre

    Dans un message ordinaire, envoyé séparément :

    • Le nom d’hôte ou l’adresse IP, et le port
    • Le compte avec lequel se connecter
    • L’utilisation d’une clé ou d’un mot de passe
    • L’empreinte de la clé d’hôte, pour que le destinataire puisse vérifier le serveur à la première connexion
    • Une courte note sur l’objet de l’accès et sa date de fin

    Ne mettez de captures d’écran ou de journaux de terminal ni dans l’un ni dans l’autre. Une capture d’une session en cours contient souvent des jetons, des adresses internes et d’autres noms d’utilisateur qui n’étaient pas censés circuler.

    Aider le destinataire à installer la clé en sécurité

    Une transmission sécurisée échoue quand même si la clé finit dans le dossier Téléchargements, lisible par tout le monde. Envoyez ces instructions avec les détails de connexion :

    # save the key, then lock it down
    chmod 600 ~/.ssh/acme_deploy
    ssh-add ~/.ssh/acme_deploy
    # verify the host key fingerprint against the one you were sent
    ssh -i ~/.ssh/acme_deploy deploy@203.0.113.5
    

    Demandez-lui de n’ouvrir le lien secret qu’au moment de s’en servir, sur un appareil qu’il contrôle et avec une connexion de confiance. L’ouvrir sur une machine partagée « pour vérifier que ça marche » laisse une copie dans l’historique du presse-papiers de cette machine.

    Vérifier, puis refermer la fenêtre

    Tant que la fenêtre d’accès est ouverte, demandez au destinataire de tester la connexion exacte et de confirmer que la tâche s’exécute. N’élargissez pas les droits pour qu’un test réussisse ; corrigez plutôt le périmètre.

    Une fois le travail terminé :

    1. Supprimez la clé publique de authorized_keys, ou désactivez le compte, ou laissez le certificat expirer comme prévu.
    2. Renouvelez tout ce qui a circulé avec l’identifiant, y compris un mot de passe temporaire qui devait être changé à la première connexion et ne l’a pas été.
    3. Examinez auth.log ou votre source d’audit SSH pour repérer les connexions en dehors de la période convenue ou depuis des adresses inattendues.
    4. Notez qui a eu quoi, et de quand à quand. La trace reste ; l’identifiant, non.

    L’expiration du lien limite la durée pendant laquelle le secret pouvait être récupéré. L’expiration de l’identifiant limite la durée pendant laquelle il peut servir. Il vous faut les deux, et c’est la seconde que l’on oublie.

    Outils pour cet article

    Questions fréquentes

    LinkPilot envoie un lien secret qui disparaît une fois ouvert.

    Chiffré dans votre navigateur, affiché une seule fois, puis détruit. Sans compte.

    Créer un lien secret

    À lire ensuite