W3docs

Clé SSH

Qu'est-ce qu'une clé SSH, quels types existent et comment la configurer sur Mac, Linux ou Windows ? Toutes les informations utiles et les commandes.

Lorsque vous poussez vers un dépôt distant ou en tirez des données via SSH (par exemple une URL [email protected]:...), Git doit prouver votre identité sans saisir de mot de passe à chaque fois. Les clés SSH résolvent ce problème. Ce chapitre explique ce qu'est une clé SSH, comment fonctionne la paire de clés, et comment en générer une et l'enregistrer auprès d'un dépôt distant sur macOS, Linux et Windows.

Qu'est-ce que les clés SSH ?

Clé SSH

Une clé SSH est un identifiant d'accès utilisé dans le protocole SSH (Secure Shell). SSH est un protocole réseau qui vous permet de vous connecter d'un ordinateur à un autre de manière sécurisée, et de gérer des serveurs, des systèmes d'exploitation et des configurations via une connexion chiffrée. Fonctionnellement, les clés SSH jouent le même rôle qu'un mot de passe, mais elles sont bien plus sécurisées : la clé n'est jamais transmise sur le réseau, et dériver la clé privée à partir de la clé publique est computationnellement infaisable.

Les clés SSH viennent toujours par paires, et chaque paire est composée d'une clé publique et d'une clé privée :

  1. Clé publique (également appelée clé autorisée). Vous la partagez librement et l'ajoutez à chaque système auquel vous souhaitez accéder. Elle détermine qui est autorisé à entrer.
  2. Clé privée (également appelée clé d'identité). Elle reste secrète sur votre machine et ne doit jamais être partagée. Elle prouve votre identité auprès de tout serveur qui détient la clé publique correspondante.

Les deux sont mathématiquement liées. Un serveur chiffre un défi avec votre clé publique ; seul le détenteur de la clé privée correspondante peut y répondre. C'est ainsi que l'authentification se produit sans jamais transmettre un secret.

Avertissement

Never share, email, or commit your private key (~/.ssh/id_ed25519). Only the file ending in .pub is meant to be copied to servers and Git hosting providers.

Pourquoi utiliser des clés SSH avec Git

  • Aucun mot de passe à chaque push. Une fois la clé enregistrée, git push, git pull et git fetch via SSH s'authentifient silencieusement.
  • Plus sûres que les mots de passe. Les clés ne peuvent pas être devinées ni soumises à une attaque par force brute comme peuvent l'être des mots de passe courts.
  • Requises par de nombreux hébergeurs. GitHub n'accepte plus les mots de passe de compte pour les opérations Git ; les clés SSH (ou les tokens) sont la norme.

Pour cloner un dépôt avec SSH une fois votre clé configurée, utilisez la forme git@ de l'URL. Voir Git Clone et Git Remote pour la manière dont les dépôts distants sont adressés.

Comment configurer des clés SSH ?

Vous générez des clés SSH avec un outil de génération de clés, presque toujours ssh-keygen, qui est fourni avec le client OpenSSH. Il utilise des algorithmes cryptographiques à clé publique ; les plus courants sont Ed25519 (moderne, court, rapide, recommandé) et RSA. Des algorithmes plus anciens comme DSA existent mais sont désormais considérés comme faibles et sont désactivés par défaut dans OpenSSH actuel.

L'option -t sélectionne l'algorithme. Deux choix courants :

# Recommended: Ed25519
ssh-keygen -t ed25519 -C "[email protected]"

# Compatibility fallback: RSA with a 4096-bit key
ssh-keygen -t rsa -b 4096 -C "[email protected]"

L'option -C ajoute un commentaire (généralement votre adresse e-mail) afin que la clé soit facile à identifier dans une liste de clés autorisées.

Créer une clé SSH sur Mac et Linux

Les deux systèmes d'exploitation sont livrés avec un terminal moderne et le paquet OpenSSH, de sorte que les étapes sont identiques.

  1. Ouvrez un terminal et exécutez :

Générer la paire de clés

ssh-keygen -t ed25519 -C "[email protected]"
  1. Choisissez où enregistrer la clé. Appuyez sur Entrée pour accepter l'emplacement par défaut (~/.ssh/id_ed25519) :

Choisir l'emplacement du fichier

> Enter a file in which to save the key (~/.ssh/id_ed25519): [Press enter]

Cela crée deux fichiers : la clé privée id_ed25519 et la clé publique id_ed25519.pub.

  1. Définissez une phrase secrète. Cela chiffre la clé privée sur le disque, de sorte que même un fichier de clé volé est inutilisable sans elle. Il vous sera demandé à chaque première utilisation de la clé dans une session :

Définir une phrase secrète

> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
  1. Ajoutez la nouvelle clé SSH au ssh-agent. Le ssh-agent conserve vos clés privées déchiffrées en mémoire et signe les demandes d'authentification en votre nom, de sorte que vous ne saisissez la phrase secrète qu'une seule fois par session.

Exécutez la commande suivante pour vous assurer que le ssh-agent est en cours d'exécution :

Clé SSH sur Linux

eval "$(ssh-agent -s)"
> Agent pid 59566

Si le ssh-agent est en cours d'exécution, ajoutez la nouvelle clé SSH à l'agent SSH local en exécutant la commande suivante :

Clé SSH

ssh-add ~/.ssh/id_ed25519

(Note: On modern macOS (OpenSSH 8.8+), ssh-add -K is deprecated. Instead, add AddKeysToAgent yes to your ~/.ssh/config file to automatically persist keys in the keychain.)

  1. Copiez la clé publique sur le serveur distant. Pour utiliser la clé pour l'authentification, vous devez l'ajouter au fichier ~/.ssh/authorized_keys du serveur distant. Exécutez la commande suivante depuis votre machine locale :
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host
  1. Vérifiez la connexion. Testez que vous pouvez vous connecter au serveur distant en utilisant votre nouvelle clé :
ssh user@remote_host

Créer une clé SSH sur Windows

Vous avez besoin de Git Bash pour créer une clé SSH sur le système d'exploitation Windows. Ouvrez Git Bash et exécutez la commande suivante pour générer la clé :

ssh-keygen -t ed25519 -C "[email protected]"

Suivez les mêmes invites que ci-dessus pour définir l'emplacement du fichier et la phrase secrète. Après avoir généré la clé, copiez-la sur votre serveur distant ou votre service d'hébergement Git en utilisant la commande ssh-copy-id, ou en collant le contenu de id_ed25519.pub dans les paramètres de clé SSH du service.

Ajouter votre clé à GitHub, GitLab ou Bitbucket

Un hébergeur Git n'est pas un serveur SSH que vous contrôlez, donc ssh-copy-id ne s'applique pas — vous collez plutôt la clé publique dans l'interface web. Affichez la clé publique et copiez-la :

cat ~/.ssh/id_ed25519.pub

La sortie est une ligne unique qui commence par ssh-ed25519 et se termine par le commentaire que vous avez défini :

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... [email protected]

Copiez cette ligne entière et ajoutez-la dans les paramètres de clé SSH de votre compte (sur GitHub : Paramètres → SSH and GPG keys → New SSH key). Vérifiez ensuite la connexion :

ssh -T [email protected]

Une première connexion réussie vous demande de confirmer l'empreinte de l'hôte, puis vous salue par votre nom d'utilisateur — elle n'ouvre pas de shell, ce qui est normal pour GitHub.

Une fois la clé enregistrée, basculez votre dépôt distant vers l'URL SSH pour que les pushs l'utilisent :

git remote set-url origin [email protected]:user/repo.git

Voir Git Remote pour gérer les URL distantes et Git Push pour envoyer vos commits.

Problèmes courants et conseils

  • Permission denied (publickey) signifie généralement que l'hôte ne possède pas de clé publique correspondante, ou que l'agent ne détient pas votre clé privée. Exécutez ssh-add -l pour lister les clés chargées et rajoutez la vôtre si nécessaire.
  • Réutilisez une clé pour plusieurs hôtes. Une seule paire de clés peut s'authentifier auprès de nombreux serveurs ; vous n'avez pas besoin d'une nouvelle clé par projet. Générez une clé séparée uniquement lorsque vous souhaitez isoler un accès.
  • Sauvegardez vos clés, pas seulement vos dépôts. Perdre ~/.ssh/id_ed25519 signifie régénérer et réenregistrer partout.
  • Les clés SSH authentifient les connexions ; si vous souhaitez également prouver qui a rédigé un commit, c'est un mécanisme distinct — voir Signing Commits. Pour la première configuration, voir Install Git et Git Config.

Pratique

Pratique
Quels sont les aspects importants des clés SSH dans le contexte de Git ?
Quels sont les aspects importants des clés SSH dans le contexte de Git ?
Was this page helpful?