Corriger l'erreur « Permission denied (publickey) » lors d'un push vers GitHub

Vous obtenez une erreur « Permission denied (publickey) » en tentant de pousser vers GitHub ? Cette erreur signifie que GitHub ne peut pas vous authentifier en raison d’un problème de clé SSH. Corrigeons cela rapidement.
Points clés à retenir
- L’erreur se produit lorsque GitHub ne peut pas authentifier votre connexion SSH
- Trois causes principales : clés SSH manquantes, clés non ajoutées à GitHub, ou format d’URL distante incorrect
- Testez votre connexion avec
ssh -T git@github.com
pour vérifier que la correction fonctionne - L’agent SSH et les fichiers de configuration aident à gérer plusieurs comptes ou l’authentification persistante
Signification de cette erreur
L’erreur « Permission denied (publickey) » se produit lorsque Git tente de se connecter à GitHub via SSH, mais que l’authentification échoue. Considérez les clés SSH comme un mot de passe spécial qui permet à votre ordinateur de communiquer avec GitHub de manière sécurisée.
Ce guide couvre les trois causes principales et vous montre exactement comment corriger chacune d’elles.
Les trois causes principales (et comment les corriger)
1. Aucune clé SSH créée sur votre ordinateur
Vérification rapide :
ls -la ~/.ssh
Si vous voyez « No such file or directory » ou que le dossier est vide, vous devez créer des clés SSH.
Correction : Générez une nouvelle paire de clés SSH :
ssh-keygen -t ed25519 -C "your-email@example.com"
Appuyez trois fois sur Entrée pour accepter les valeurs par défaut. Cela crée deux fichiers :
~/.ssh/id_ed25519
(clé privée - gardez-la secrète)~/.ssh/id_ed25519.pub
(clé publique - à partager avec GitHub)
2. Clé publique non ajoutée à GitHub
Même avec des clés SSH créées, GitHub ne vous reconnaîtra pas tant que vous n’aurez pas ajouté votre clé publique à votre compte.
Correction : D’abord, copiez votre clé publique :
cat ~/.ssh/id_ed25519.pub
Ensuite, ajoutez-la à GitHub :
- Rendez-vous sur les paramètres SSH de GitHub
- Cliquez sur « New SSH key »
- Collez votre clé et enregistrez
3. Format d’URL distante incorrect
Les URL SSH de GitHub doivent commencer par git@github.com:
- pas votre email ou nom d’utilisateur.
Vérifiez votre URL actuelle :
git remote -v
Format correct :
git@github.com:username/repository.git
Formats incorrects :
youremail@github.com:username/repository.git ❌
https://github.com/username/repository.git ❌ (ceci est HTTPS, pas SSH)
Correction : Mettez à jour vers l’URL SSH correcte :
git remote set-url origin git@github.com:username/repository.git
Discover how at OpenReplay.com.
Vérifier que tout fonctionne
Testez votre connexion SSH à GitHub :
ssh -T git@github.com
Vous devriez voir :
Hi username! You've successfully authenticated...
Si cela fonctionne, vous pouvez maintenant pousser vers GitHub sans l’erreur de permission refusée.
Problèmes courants de dépannage
L’agent SSH n’est pas en cours d’exécution
Si votre clé existe mais ne fonctionne toujours pas, l’agent SSH n’est peut-être pas en cours d’exécution.
Correction :
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Plusieurs comptes GitHub
La gestion de plusieurs comptes nécessite un fichier de configuration SSH. Créez ~/.ssh/config
:
Host github.com-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
Host github.com-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
Ensuite, clonez en utilisant :
git clone git@github.com-work:company/repository.git
Notes spécifiques aux plateformes
- Utilisateurs Windows : Utilisez Git Bash au lieu de l’Invite de commandes ou PowerShell
- Utilisateurs macOS/Linux : Utilisez le Terminal
Les deux plateformes suivent les mêmes commandes présentées ci-dessus.
Conclusion
L’erreur « Permission denied (publickey) » est frustrante mais facile à corriger. Dans la plupart des cas, vous devez simplement créer des clés SSH et ajouter la clé publique à GitHub. N’oubliez pas de vérifier votre connexion avec ssh -T git@github.com
avant de pousser.
Une fois correctement configuré, vous ne verrez plus jamais cette erreur pour ce dépôt.
FAQ
Bien que techniquement possible, il est recommandé de créer des paires de clés distinctes pour chaque compte. Cela améliore la sécurité et facilite le dépannage lors de la gestion de différents dépôts.
SSH est plus pratique une fois configuré car vous n'avez pas besoin de mots de passe pour chaque push. HTTPS fonctionne partout mais nécessite des jetons d'authentification ou des mots de passe pour chaque opération.
Non. Ajoutez votre clé à l'agent SSH en utilisant ssh-add pour mettre en cache la phrase secrète pour votre session. Ainsi, vous ne la saisissez qu'une seule fois par session.
Générez immédiatement une nouvelle paire de clés et mettez à jour GitHub avec la nouvelle clé publique. Supprimez la clé compromise des paramètres GitHub et ne partagez jamais les clés privées.
Understand every bug
Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.