Le Probleme : 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 access rights
and the repository exists.
Bonne nouvelle ! Ce tutoriel va resoudre ce probleme en quelques etapes 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 systeme de deux cles :
- 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 cle publique est comme un cadenas que vous donnez a quelqu'un. Seule votre cle privee peut l'ouvrir !
Etape 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.
Etape 2 : Verifier les cles SSH existantes
Tapez cette commande pour voir si vous avez deja une cle SSH :
$ ls -la ~/.ssh/
Resultat A : Le dossier n'existe pas
ls: cannot access '/home/user/.ssh/': No such file or directory
Pas de cle SSH. Passez a l'etape 3.
Resultat 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 cle ! Vous pouvez passer a l'etape 4.
Etape 3 : Creer votre cle SSH
Remplacez votre-email@example.com par votre vrai email :
$ ssh-keygen -t ed25519 -C "votre-email@example.com"
Question 1 : Ou sauvegarder la cle ?
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 debutants : Appuyez sur Entree deux fois (pas de mot de passe). Vous pourrez toujours en ajouter un plus tard.
Resultat 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 cle SSH est creee. Deux fichiers ont ete generes dans ~/.ssh/
Etape 4 : Recuperer votre cle publique
Affichez votre cle publique avec cette commande :
$ cat ~/.ssh/id_ed25519.pub
Resultat
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
| Systeme | Commande |
|---|---|
| Windows | cat ~/.ssh/id_ed25519.pub | clip |
| macOS | cat ~/.ssh/id_ed25519.pub | pbcopy |
| Linux | cat ~/.ssh/id_ed25519.pub | xclip -selection clipboard |
Etape 5 : Ajouter la cle 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 cle 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 cle 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 cle et sauvegardez
Etape 6 : Tester la connexion
Avant de cloner, verifions que tout fonctionne :
Pour GitLab
$ ssh -T git@gitlab.com
Reponse attendue :
Welcome to GitLab, @votre-username!
Pour GitHub
$ ssh -T git@github.com
Reponse attendue :
Hi votre-username! You've successfully authenticated, but GitHub does not provide shell access.
Premiere connexion ? Si vous voyez un message demandant de confirmer l'authenticite de l'hote, tapez yes et appuyez sur Entree.
Etape 7 : Cloner votre projet
Maintenant vous pouvez cloner n'importe quel projet :
$ git clone git@gitlab.com:mon-equipe/mon-projet.git
Resultat 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.
Etape 8 : Pousser vos modifications (git push)
Apres avoir clone le projet et fait vos modifications :
$ git add .
$ git commit -m "Ma premiere modification"
$ git push
Probleme : 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 securite qui empeche de modifier directement le code principal.
Solution : Creer une nouvelle branche
# Creer une nouvelle branche et y basculer
$ git checkout -b ma-fonctionnalite
# Pousser cette branche sur le serveur
$ git push -u origin ma-fonctionnalite
Succes ! Votre code est sur le serveur. GitLab vous donne meme un lien pour creer une Merge Request !
Etape 9 : Creer 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 verifier que tout fonctionne
- Historique propre : On sait qui a fait quoi et pourquoi
Creer une MR sur GitLab
- Apres 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 cles existantes
ls -la ~/.ssh/
# 2. Creer une nouvelle cle SSH
ssh-keygen -t ed25519 -C "votre-email@example.com"
# 3. Afficher la cle 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. Creer une branche pour vos modifications
git checkout -b ma-fonctionnalite
# 7. Apres modifications, sauvegarder
git add .
git commit -m "Description des changements"
# 8. Envoyer sur le serveur
git push -u origin ma-fonctionnalite
# 9. Creer une Merge Request sur GitLab/GitHub (via navigateur)
Problemes courants et solutions
Probleme 1 : "Permission denied (publickey)"
Cause : Votre cle publique n'est pas enregistree sur le serveur.
Solution : Verifiez que vous avez bien ajoute votre cle dans GitLab/GitHub (etape 5). Assurez-vous d'avoir copie la cle entiere.
Probleme 2 : On me demande une passphrase
Cause : Votre cle a ete creee avec un mot de passe.
Solutions :
- Tapez le mot de passe que vous avez defini
- Ou creez une nouvelle cle sans mot de passe :
ssh-keygen -t ed25519 -C "email" -N ""
Probleme 3 : "Could not resolve hostname"
Cause : Probleme de connexion internet ou DNS.
Solution : Verifiez votre connexion internet. Essayez ping gitlab.com.
Probleme 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
Probleme 5 : La mauvaise cle est utilisee
Cause : Vous avez plusieurs cles SSH.
Solution : Creez un fichier ~/.ssh/config :
Host gitlab.com
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_ed25519
Conclusion
Vous savez maintenant :
- Creer une cle SSH
- Ajouter votre cle publique sur GitLab/GitHub
- Cloner des projets sans mot de passe
- Creer une branche pour vos modifications
- Pousser vos changements sur le serveur
- Creer une Merge Request pour integrer votre code
- Resoudre les problemes 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 !