943 votes

Message d'erreur GitHub - Permission refusée (clé publique)

Est-ce que quelqu'un a vu cette erreur et sait quoi faire?

Je suis en train d'utiliser le terminal, je suis dans le répertoire racine, le dépôt GitHub existe et je ne sais pas quoi faire maintenant.

> git push -u origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Veuillez vous assurer d'avoir les droits d'accès corrects
et que le dépôt existe.

11 votes

2 votes

1 votes

Pourrait être des problèmes de permission avec .ssh et les clés autorisées. Ssh est assez strict, google it.

830voto

bdukes Points 54833

GitHub n'est pas en mesure de vous authentifier. Ainsi, soit vous n'êtes pas configuré avec une clé SSH, car vous n'avez pas encore créé une sur votre machine, ou votre clé n'est pas associée à votre compte GitHub.

Vous pouvez également utiliser l'URL HTTPS au lieu de l'URL SSH/git pour éviter d'avoir à gérer les clés SSH. C'est la méthode recommandée par GitHub.

Par ailleurs, GitHub a une page d'aide spécifique pour ce message d'erreur, et explique en détail tout ce que vous pourriez vérifier.

Pour résoudre ce problème :

  1. Vous devriez avoir une clé publique dans votre répertoire personnel, donc affichez le contenu de votre clé publique, dans une distribution Linux par exemple exécutez cat ~/.ssh/id_rsa.pub (si la commande précédente ne fonctionne pas, vérifiez les clés à l'intérieur de ~/.ssh/ avec l'extension .pub)

  2. Ajoutez le contenu d'une telle clé publique sur votre compte GitHub : cliquez sur votre photo de profil -> Paramètres-> Clés SSH et GPG -> Nouvelle clé SSH ou Ajouter une clé SSH

66 votes

Cette erreur n'est pas exclusive à GitHub. Je rencontre la même erreur avec BitBucket, et je me creuse la tête pour trouver comment la résoudre...

47 votes

La partie d'aide consiste à utiliser ssh -vT git@github.com de la page d'aide de Github pour aider à déboguer la clé que votre dépôt utilise. Je vous suggère de l'ajouter dans votre réponse.

0 votes

Je dois me rappeler que sur GitHub, si vous passez de HTTPS à SSH, il se souvient de ce paramètre pour tous les dépôts! J'ai tendance à passer de l'un à l'autre, car j'utilise TeamCity, qui utilise SSH et pour mon dépôt local j'ai tendance à utiliser simplement HTTPS. Je suppose que la configuration de SSH localement m'empêchera d'avoir le même 'problème' à l'avenir! Merci @bdukes

125voto

Igor Ganapolsky Points 2851

Avez-vous créé un fichier config dans votre répertoire ~/.ssh ? Il devrait contenir des éléments comme ceux-ci :

Host github.com 
 IdentityFile ~/.ssh/github_rsa

En supposant que vous avez créé une clé ssh nommée github_rsa

et l'avez téléchargée sur GitHub...

REMARQUE : Vous devez suivre cette méthode de configuration explicite si vous avez plus d'une clé (2 ou plus) dans votre répertoire ~/.ssh/. Si vous ne spécifiez pas la clé de cette manière, alors la première clé dans l'ordre est utilisée pour l'authentification GitHub, donc cela dépend du nom du fichier de clé dans ce cas.

1 votes

J'avais généré la clé SSH et j'avais pu travailler correctement, pendant un certain temps, sans aucun problème. Un beau jour (probablement après un redémarrage), cela a cessé de fonctionner, alors que la clé était toujours présente sur GitHub et sur mon système local. J'ai ajouté le fichier "config", spécifiant la clé mappée au domaine. Détails fournis ci-dessus dans la réponse de Igor Ganapolsky. Ça marche bien !

4 votes

Cela résout effectivement mon problème! Un grand merci! Mais j'ai une question. Avant d'utiliser votre méthode, ssh -T git@github.com répond correctement, alors que git push -u origin master donne la même erreur que dans la question. Pourquoi puis-je me connecter correctement mais ne peux pas pousser ou récupérer des informations?

0 votes

@EdenHarder Je fais face au même problème. As-tu trouvé une réponse à cela?

66voto

cdhowie Points 62253

Vous devez générer une clé SSH (si vous n'en avez pas déjà une) et associer la clé publique à votre compte Github. Voir la documentation de Github.

2 votes

Merci pour cela... J'ai maintenant une clé SSH générée à partir de GitHub. Quelle commande est utilisée pour associer les deux dans le terminal maintenant? Merci!

2 votes

Il n'y a pas de commande de terminal pour cela. Consultez l'étape 4 de la documentation que j'ai liée dans ma réponse.

0 votes

J'ai cloné le dépôt en utilisant HTTPS. Ai-je besoin de générer une clé SSH dans ce cas?

62voto

rmundo Points 151

Cela m'est arrivé. Pour une raison quelconque, mon origine s'est déréglée sans que je m'en rende compte :

Vérifiez si vos paramètres sont toujours corrects

git remote -v

L'URL doit ressembler à ssh://git@github.com/VotreDossier/VotreProjet.git; si vous ne voyez pas git@github.com, utilisez

git remote set-url origin git://github.com/VotreDossier/VotreProjet.git

pour le configurer correctement. Ou vous pouvez utiliser l'application Github pour vérifier et configurer l'URL du dépôt distant principal dans le panneau de paramètres de votre dépôt particulier.

9 votes

Faites attention aux URLs. Elles diffèrent entre https et ssh et les publications sur cette page ne le mentionnent pas clairement. Chaque projet git a un fichier .git/config dans le répertoire racine du projet. Vous pouvez y définir les informations de remote et de branche. Définir le remote pour https: url = github.com//.git Alors que pour git+ssh: url = git@github.com:/.git Avoir la mauvaise URL provoque l'erreur de permission refusée de la clé publique, ce qui n'est probablement pas une erreur très claire.

0 votes

Pour mon cas dans le final ça fonctionne juste dans la partie : git remote set-url origin github.com/ton_repertoire/ton_projet.git

20voto

d1jhoni1b Points 1110

Tout d'abord, nous devons vérifier si des clés ssh existent sur votre ordinateur. Ouvrez Terminal et exécutez :

ls -al ~/.ssh

#ou

cd ~/.ssh
ls

et cela affichera la liste des fichiers dans votre répertoire .ssh

Et enfin, en fonction de ce que vous voyez (dans mon cas était) :

 github_rsa  github_rsa.pub known_hosts

Essayez simplement de configurer votre RSA et espérons que cela résoudra vos problèmes de "git push origin"

$ ssh-keygen -lf ~/.ssh/github_rsa.pub

REMARQUE : Les certificats RSA sont des paires de clés, vous aurez donc un certificat privé et un certificat public, le privé ne sera pas accessible pour vous car il appartient à github (dans ce cas), mais le public est celui que vous pourriez manquer lorsque cette erreur se produit (du moins dans mon cas, mon compte github ou mon dépôt a été altéré d'une manière ou d'une autre et j'ai dû "lier" la clé publique, précédemment générée)

0 votes

Est-ce que je dois copier la sortie SHA sur github à partir de cette commande ?

0 votes

Non, exécutez simplement "ssh-keygen -lf ~/.ssh/"

0 votes

C'est pourquoi j'ai également ajouté une commande qui "Liste les fichiers de votre répertoire .ssh"... de cette façon, vous saurez à partir de quel fichier extraire votre clé (ssh-keygen). Rappelez-vous que les certificats RSA sont des paires de clés, vous aurez donc un certificat privé et un certificat public, le privé ne sera pas accessible pour vous car il appartient à GitHub (dans ce cas), mais le public est celui que vous pourriez manquer lorsque cette erreur se produit (au moins c'était mon cas, mon compte GitHub ou mon dépôt ont été désorganisés d'une manière ou d'une autre et j'ai dû "lier" la clé publique, préalablement générée, à nouveau)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X