Le Problème : Permission denied (publickey)
Vous essayez de cloner un projet Git et vous obtenez cette erreur frustrante :
$ git clone git@gitlab.com:mon-equipe/mon-projet.git
git@gitlab.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct accèss rights
and the repository exists.
Bonne nouvelle ! Ce tutoriel va resoudre ce problème en quelques étapes simples. Suivez le guide !
Comprendre SSH en 2 minutes
Pourquoi cette erreur ?
Quand vous utilisez SSH pour Git, le serveur (GitLab, GitHub...) a besoin de vous identifier. C'est comme un videur a l'entree d'un club VIP : si vous n'etes pas sur la liste, vous n'entrez pas !
Comment fonctionne SSH ?
SSH utilise un système de deux clés :
- Cle Privee (id_ed25519) : Reste sur votre ordinateur. SECRETE, ne jamais partager !
- Cle Publique (id_ed25519.pub) : Enregistree sur GitLab/GitHub. Peut etre partagee.
Analogie : La clé publique est comme un cadenas que vous donnez a quelqu'un. Seule votre clé privee peut l'ouvrir !
Étape 1 : Ouvrir le Terminal
Sur Windows
Option 1 : PowerShell
- Appuyez sur
Windows + R - Tapez
powershell - Appuyez sur Entree
Option 2 : Git Bash (recommande)
- Clic droit sur le Bureau
- Selectionnez "Git Bash Here"
Sur macOS
- Appuyez sur
Cmd + Espace - Tapez
Terminal - Appuyez sur Entree
Sur Linux
Appuyez sur Ctrl + Alt + T ou cherchez "Terminal" dans vos applications.
Étape 2 : Verifier les clés SSH existantes
Tapez cette commande pour voir si vous avez deja une clé SSH :
$ ls -la ~/.ssh/
Résultat A : Le dossier n'existe pas
ls: cannot accèss '/home/user/.ssh/': No such file or directory
Pas de clé SSH. Passez a l'étape 3.
Résultat B : Des fichiers existent
total 12
drwx------ 2 user user 4096 Jan 28 10:00 .
drwxr-xr-x 15 user user 4096 Jan 28 09:00 ..
-rw------- 1 user user 411 Jan 28 10:00 id_ed25519
-rw-r--r-- 1 user user 99 Jan 28 10:00 id_ed25519.pub
Vous avez deja une clé ! Vous pouvez passer a l'étape 4.
Étape 3 : Créer votre clé SSH
Remplacez votre-email@example.com par votre vrai email :
$ ssh-keygen -t ed25519 -C "votre-email@example.com"
Question 1 : Ou sauvegarder la clé ?
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
Appuyez sur Entree pour accepter l'emplacement par defaut.
Question 2 : Mot de passe (passphrase) ?
Enter passphrase (empty for no passphrase):
| Option | Action | Avantage |
|---|---|---|
| Sans mot de passe | Appuyez sur Entree | Plus simple au quotidien |
| Avec mot de passe | Tapez un mot de passe | Plus securise |
Pour les débutants : Appuyez sur Entree deux fois (pas de mot de passe). Vous pourrez toujours en ajouter un plus tard.
Résultat attendu
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz1234567890 votre-email@example.com
Felicitations ! Votre clé SSH est créée. Deux fichiers ont ete generes dans ~/.ssh/
Étape 4 : Récupérer votre clé publique
Affichez votre clé publique avec cette commande :
$ cat ~/.ssh/id_ed25519.pub
Résultat
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExEmPlEdEcLeSsIoNs4VmBnCLdeOfqNP9Lzpd votre-email@example.com
Important : Copiez toute la ligne, du ssh-ed25519 jusqu'a votre email.
Copier facilement dans le presse-papier
| Système | Commande |
|---|---|
| Windows | cat ~/.ssh/id_ed25519.pub | clip |
| macOS | cat ~/.ssh/id_ed25519.pub | pbcopy |
| Linux | cat ~/.ssh/id_ed25519.pub | xclip -selection clipboard |
Étape 5 : Ajouter la clé sur le serveur Git
Pour GitLab
- Connectez-vous a GitLab (gitlab.com ou votre serveur)
- Cliquez sur votre photo de profil (en haut a droite)
- Cliquez sur "Edit profile"
- Dans le menu a gauche, cliquez sur "SSH Keys"
- Cliquez sur "Add new key"
- Dans "Key" : collez votre clé publique (Ctrl+V)
- Dans "Title" : donnez un nom (ex: "Mon PC Windows")
- Cliquez sur "Add key"
Pour GitHub
- Connectez-vous a GitHub.com
- Cliquez sur votre photo puis Settings
- Cliquez sur "SSH and GPG keys"
- Cliquez sur "New SSH key"
- Title : donnez un nom
- Key : collez votre clé publique
- Cliquez sur "Add SSH key"
Pour Bitbucket
- Connectez-vous a Bitbucket
- Cliquez sur votre photo puis Personal settings
- Cliquez sur "SSH keys"
- Cliquez sur "Add key"
- Collez votre clé et sauvegardez
Étape 6 : Tester la connexion
Avant de cloner, verifions que tout fonctionne :
Pour GitLab
$ ssh -T git@gitlab.com
Réponse attendue :
Welcome to GitLab, @votre-username!
Pour GitHub
$ ssh -T git@github.com
Réponse attendue :
Hi votre-username! You've succèssfully authenticated, but GitHub does not provide shell accèss.
Premiere connexion ? Si vous voyez un message demandant de confirmer l'authenticite de l'hote, tapez yes et appuyez sur Entree.
Étape 7 : Cloner votre projet
Maintenant vous pouvez cloner n'importe quel projet :
$ git clone git@gitlab.com:mon-equipe/mon-projet.git
Résultat attendu
Cloning into 'mon-projet'...
remote: Enumerating objects: 156, done.
remote: Counting objects: 100% (156/156), done.
remote: Compressing objects: 100% (89/89), done.
Receiving objects: 100% (156/156), 1.25 MiB | 2.50 MiB/s, done.
Resolving deltas: 100% (67/67), done.
Bravo ! Votre projet est clone ! Vous n'aurez plus jamais a entrer de mot de passe pour Git.
Étape 8 : Pousser vos modifications (git push)
Après avoir clone le projet et fait vos modifications :
$ git add .
$ git commit -m "Ma premiere modification"
$ git push
Problème : Branche protegee
Vous pouvez rencontrer cette erreur :
remote: GitLab: You are not allowed to push code to protected branches on this project.
! [remote rejected] main -> main (pre-receive hook declined)
Explication : La branche main est protegee. C'est une bonne pratique de sécurité qui empeche de modifier directement le code principal.
Solution : Créer une nouvelle branche
# Créer une nouvelle branche et y basculer
$ git checkout -b ma-fonctionnalité
# Pousser cette branche sur le serveur
$ git push -u origin ma-fonctionnalité
Succès ! Votre code est sur le serveur. GitLab vous donne meme un lien pour créer une Merge Request !
Étape 9 : Créer une Merge Request (MR)
Une Merge Request (ou Pull Request sur GitHub) permet de demander la fusion de votre branche dans main.
Pourquoi utiliser une Merge Request ?
- Revue de code : Vos collegues peuvent relire vos modifications
- Tests automatiques : Les pipelines CI/CD peuvent vérifiér que tout fonctionne
- Historique propre : On sait qui a fait quoi et pourquoi
Créer une MR sur GitLab
- Après le
git push, GitLab vous donne un lien direct dans le terminal - Ou manuellement : allez sur votre projet GitLab, cliquez sur "Merge Requests", puis "New merge request"
- Selectionnez votre branche comme source et
maincomme cible - Remplissez le titre et la description
- Cliquez sur "Create merge request"
Resume des commandes
# ============ CONFIGURATION SSH (1 fois) ============
# 1. Verifier les clés existantes
ls -la ~/.ssh/
# 2. Créer une nouvelle clé SSH
ssh-keygen -t ed25519 -C "votre-email@example.com"
# 3. Afficher la clé publique (a copier dans GitLab/GitHub)
cat ~/.ssh/id_ed25519.pub
# 4. Tester la connexion
ssh -T git@gitlab.com # Pour GitLab
ssh -T git@github.com # Pour GitHub
# ============ WORKFLOW QUOTIDIEN ============
# 5. Cloner un projet
git clone git@gitlab.com:utilisateur/projet.git
cd projet
# 6. Créer une branche pour vos modifications
git checkout -b ma-fonctionnalité
# 7. Après modifications, sauvegarder
git add .
git commit -m "Description des changements"
# 8. Envoyer sur le serveur
git push -u origin ma-fonctionnalité
# 9. Créer une Merge Request sur GitLab/GitHub (via navigateur)
Problèmes courants et solutions
Problème 1 : "Permission denied (publickey)"
Cause : Votre clé publique n'est pas enregistree sur le serveur.
Solution : Verifiez que vous avez bien ajoute votre clé dans GitLab/GitHub (étape 5). Assurez-vous d'avoir copie la clé entiere.
Problème 2 : On me demande une passphrase
Cause : Votre clé a ete créée avec un mot de passe.
Solutions :
- Tapez le mot de passe que vous avez défini
- Ou creez une nouvelle clé sans mot de passe :
ssh-keygen -t ed25519 -C "email" -N ""
Problème 3 : "Could not resolve hostname"
Cause : Problème de connexion internet ou DNS.
Solution : Verifiez votre connexion internet. Essayez ping gitlab.com.
Problème 4 : "You are not allowed to push code to protected branches"
Cause : La branche main est protegee.
Solution : Creez une nouvelle branche et faites une Merge Request :
git checkout -b ma-branche
git push -u origin ma-branche
Problème 5 : La mauvaise clé est utilisee
Cause : Vous avez plusieurs clés SSH.
Solution : Creez un fichier ~/.ssh/config :
Host gitlab.com
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_ed25519
Conclusion
Vous savez maintenant :
- Créer une clé SSH
- Ajouter votre clé publique sur GitLab/GitHub
- Cloner des projets sans mot de passe
- Créer une branche pour vos modifications
- Pousser vos changements sur le serveur
- Créer une Merge Request pour intégrer votre code
- Resoudre les problèmes courants
La configuration SSH est a faire une seule fois par ordinateur. Le workflow branche, push, Merge Request deviendra une seconde nature avec la pratique !
Des questions ? Laissez un commentaire ci-dessous !