Comment résoudre l'erreur Autorisation refusée (publickey) lors de l'utilisation de Git?


632

Je suis sur Mac Snow Leopard et je viens d'installer git.

J'ai juste essayé

git clone git@thechaw.com:cakebook.git

mais cela me donne cette erreur:

Initialized empty Git repository in `/Users/username/Documents/cakebook/.git/`
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

Qu'est-ce que je rate?
J'ai également essayé de le faire ssh-keygensans phase de passage mais toujours avec la même erreur.


8
avez-vous essayé de télécharger la clé publique que vous avez générée via ssh-keygen?
Patrick Cornelissen

Mon problème est que j'ai essayé de cloner sudo- c'est un autre utilisateur avec une autre clé publique.
Vitaly Zdanevich

même erreur. J'ai précédemment créé une clé publique via github, puis généré une autre paire de clés avec l' ssh-keygenutilitaire. La suppression de l'ancienne clé publique dans les paramètres personnels sur github et l'ajout de ma clé id_rsa.pub générée par ssh aux clés SSH et GPG a résolu les problèmes d'autorisation de clonage.
Tanner Dolby

Réponses:


774

Si l'utilisateur n'a pas généré de paire de clés publique / privée ssh avant

Ces informations fonctionnent sur theChaw mais peuvent être appliquées à tous les autres référentiels git qui prennent en charge les authentifications de clé publique SSH. (Voir gitolite , gitlab ou github par exemple.)

Commencez d'abord par configurer votre propre jeu de paires de clés publiques / privées. Cela peut utiliser DSA ou RSA, donc fondamentalement n'importe quelle clé que vous configurez fonctionnera. Sur la plupart des systèmes, vous pouvez utiliser ssh-keygen.

  • Vous aurez d'abord besoin de cd dans votre répertoire .ssh. Ouvrez le terminal et exécutez:

    cd ~/.ssh && ssh-keygen

  • Vous devez ensuite le copier dans votre presse-papiers.
    • Sous OS X, exécutez: cat id_rsa.pub | pbcopy
    • Sous Linux, exécutez: cat id_rsa.pub | xclip
    • Sous Windows (via Cygwin / Git Bash) exécutez: cat id_rsa.pub | clip
  • Ajoutez votre clé à votre compte via le site Internet.
  • Enfin, configurez votre .gitconfig.
    • git config --global user.name "bob"
    • git config --global user.email bob@... (n'oubliez pas de redémarrer votre ligne de commande pour vous assurer que la configuration est rechargée)

Voilà, vous devriez être bon de cloner et de commander.

Pour plus d'informations, rendez-vous sur https://help.github.com/articles/generating-ssh-keys (merci à @Lee Whitney) -

Si l'utilisateur a généré une paire de clés publique / privée ssh avant

  • vérifier quelle clé a été autorisée dans les paramètres de votre compte github ou gitlab
  • déterminer quelle clé privée correspondante doit être associée à partir de votre ordinateur local

eval $(ssh-agent -s)

  • définir où se trouvent les clés

ssh-add ~/.ssh/id_rsa


6
D'accord. Ce n'est en fait pas un git mais un problème de synchronisation ssh. J'ai obtenu la même chose avec Assembla et votre lien m'a aidé à le résoudre. Merci !
Alexandre Bourlier

Cette réponse est utile mais elle semble plus complète et tout aussi simple si vous générez des clés à partir de zéro: help.github.com/articles/generating-ssh-keys
whitneyland

6
J'ai rencontré un problème avec le keygen. Il est sensible à l'adresse e-mail dans une variable env globale. Dans le cas où vous rencontrez ce problème, vous voudrez spécifier l'adresse e-mail de votre compte github dans la première étape: ssh-keygen -t rsa -C "your_email@youremail.com"
melchoir55

30
Si cela ne fonctionne toujours pas, vous devrez le faire ssh-add ~/.ssh/id_rsa.
Michael Litvin

1
La copie à l'aide xclipde Linux n'a fonctionné qu'en procédant comme suit xclip -sel clip < ~/.ssh/id_rsa.pub: help.github.com/articles/generating-ssh-keys
Pat Migliaccio

217

Un dépannage plus étendu et même une réparation automatisée peuvent être effectués avec:

ssh -vT git@github.com

Source: https://help.github.com/articles/error-permission-denied-publickey/


1
Mon problème était lié au fait d'avoir une clé différente pour mon serveur. Une fois que j'ai utilisé la commande ci-dessus pour déterminer le problème, j'ai corrigé le fichier IdentifyFile dans mon fichier de configuration et cela a fonctionné.
Jarie Bolander

1
A montré quelle clé github essayait d'utiliser pour s'authentifier. v utile
cdosborn

9
Cela ne règle rien. J'obtiens toujours l'erreur dans la question d'OP.
IgorGanapolsky

5
La commande est là pour vous aider à résoudre le problème, ce n'est pas un commutateur magique de correction de ceci pour moi.
stevek

2
Je ne peux pas dire que cela ait résolu quoi que ce soit, mais c'est une sacrée commande intéressante et fonctionne également avec GitHub Enterprise.
Hack-R

164

Cette erreur peut se produire lorsque vous accédez à l'URL SSH (lecture / écriture) au lieu de l'URL en lecture seule Git mais que vous n'avez aucun accès en écriture à ce référentiel.

Parfois, vous voulez simplement cloner votre propre référentiel, par exemple déployer sur un serveur. Dans ce cas, vous n'avez en fait besoin que d'un accès en lecture seule. Mais comme c'est votre propre dépôt, GitHub peut afficher l'URL SSH si c'est votre préférence. Dans cette situation, si la clé publique de votre hôte distant n'est pas dans vos clés SSH GitHub, votre accès sera refusé, ce qui devrait se produire .

Un cas équivalent est lorsque vous essayez de cloner le référentiel de quelqu'un d'autre auquel vous n'avez aucun accès en écriture avec l'URL SSH.

En un mot, si votre intention est de cloner uniquement un dépôt, utilisez l'URL HTTPS ( https://github.com/{user_name}/{project_name}.git) au lieu de l'URL SSH ( git@github.com:{user_name}/{project_name}.git), ce qui évite la validation de clé publique (inutile).


Mise à jour: GitHub affiche maintenant HTTPS comme protocole par défaut et cette décision peut probablement réduire la mauvaise utilisation possible des URL SSH.


Avec l' https://github.comurl de git, ça dit toujours SSL certificate problem: self signed certificate in certificate chain. git -c http.sslVerify=false clone ...semble être un mouvement dangereux. Chrome ne donne cependant aucun avertissement SSL. Pensées?
Jason Kleban

1
@ uosɐſ Désolé mais je n'ai jamais rencontré ce problème. Peut-être que la première chose à faire est d'essayer la même commande à partir d'une autre machine et de voir si le problème persiste.
kavinyao

1
Ça aussi, ça l'a fait pour moi. Merci. Afin de cloner mon dépôt git sur mon compte d'hébergement partagé (1 et 1), j'ai dû utiliser git clone https://github.com/MyUserName/MyRepo.git Cliquez simplement sur les liens de texte sous l'URL du dépôt à droite de la page Github où il est dit " Vous pouvez cloner avec HTTPS, SSH ou Subversion . ". (Cliquez sur HTTPS pour obtenir le lien au lieu du SSH par défaut .)
Oliver Schafeld

MERCI!!!!!!
Sharl Sherif

Excellente réponse. Enfin, quelqu'un explique pourquoi cela fonctionne comme ça.
Qback

104

Le lien d' aide de github m'a aidé à résoudre ce problème. Il semble que la clé ssh n'ait pas été ajoutée à l'agent ssh. C'est ce que j'ai fini par faire.

Commande 1:

Assurez-vous que ssh-agent est activé. La commande démarre l'agent ssh en arrière-plan:

eval "$(ssh-agent -s)"

Commande 2:

Ajoutez votre clé SSH à l'agent ssh:

ssh-add ~/.ssh/id_rsa

7
Après la mise à niveau vers OSx El Capitan vers Sierra, cela a fonctionné pour moi.
Louwki

7
Travaillez pour moi après la mise à niveau vers macOS Sierra =)
Adriano Resende

Cela a fonctionné pour moi sur Raspberry Pi, où ssh-add a un indicateur "-k" au lieu de "-K", apparemment. Mais une fois que j'ai ajouté ma clé de déploiement, j'ai réussi à cloner mon référentiel à l'aide de son lien SSH.
Josh

34

J'ai le même rapport d'erreur.

Correction de l'utilisation de HTTP à la place. Puisque je ne veux pas définir de "clés SSH" pour un PC de test.

Modifiez l'URL en HTTP lors du clonage:

git clone https://github.com/USERNAME/REPOSITORY.git

Mon problème est un peu différent : j'ai une URL définie lors de l'ajout d'un référentiel local existant à distance, en utilisant:

git remote add origin ssh://github.com/USERNAME/REPOSITORY.git

Pour le corriger, réinitialisez l'URL sur HTTP:

git remote set-url origin https://github.com/USERNAME/REPOSITORY.git

BTW, vous pouvez vérifier votre URL en utilisant la commande:

git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)

J'espère que cela aidera quelqu'un comme moi. :RÉ



21

Notez que (au moins pour certains projets) vous devez avoir un compte github avec une clé ssh .

Regardez les clés répertoriées dans votre agent d'authentification ( ssh-add -l )
(si vous n'en voyez pas, ajoutez une de vos clés existantes avec ssh-add / chemin / à / votre / clé (par exemple: ssh-add ~ /.ssh/id_rsa ))
(si vous n'avez pas de clés, créez d'abord une. Voir: http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/internet/node31.html ou simplement google ssh-keygen)

Pour vérifier que vous avez une clé associée à votre compte github :

Accédez à: https://github.com/settings/ssh

Vous devriez voir au moins une clé avec une clé de hachage correspondant à l'un des hachages que vous avez vu lorsque vous avez tapé ssh-add -l il y a une minute.

Si ce n'est pas le cas, ajoutez-en un, puis réessayez.


Cela a fonctionné pour moi. Cela m'est arrivé parce que ma clé n'a pas été ajoutée à l'agent d'authentification. Merci.
antonD

19

Je me débattais avec le même problème, c'est ce que j'ai fait et j'ai pu cloner le dépôt. J'ai suivi cette procédure pour iMac .

Première étape: vérifier si nous avons déjà la clé SSH publique.

  1. Ouvrez le terminal.
  2. Entrez ls -al ~/.sshpour voir si des clés SSH existantes sont présentes:

Vérifiez la liste des répertoires pour voir si vous possédez déjà une clé SSH publique.

Si vous ne trouvez pas, passez à l'étape 2 sinon suivez l'étape 3

Étape 2: génération de la clé SSH publique

  1. Ouvrez le terminal.
  2. Entrez la commande de suivi avec votre adresse e-mail valide que vous utilisez pour github ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  3. Vous verrez ce qui suit dans le terminal Generating public/private rsa key pair. Lorsqu'il vous invite à "Enter a file in which to save the key,"appuyer sur Entrée. Cela accepte l'emplacement de fichier par défaut. Lorsqu'il vous invite à Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]appuyer à nouveau sur Entrée. À l'invite, saisissez une phrase secrète sécurisée.
  4. Enter passphrase (empty for no passphrase): [Type a passphrase]appuyez sur entrée si vous ne voulez pas Enter same passphrase again: [Type passphrase again]appuyer à nouveau sur entrée

Cela va générer id_rsa.pub

Étape 3: ajout de votre clé SSH à l'agent ssh

  1. Type Interminal eval "$(ssh-agent -s)"
  2. Ajoutez votre clé SSH à l'agent ssh. Si vous utilisez une clé SSH existante plutôt que de générer une nouvelle clé SSH, vous devrez remplacer id_rsa dans la commande par le nom de votre fichier de clé privée existant. Entrez cette commande$ ssh-add -K ~/.ssh/id_rsa

Maintenant, copiez la clé SSH et ajoutez-la également à votre compte github

  1. Dans le terminal, entrez cette commande avec votre nom de fichier ssh pbcopy < ~/.ssh/id_rsa.pubCela copiera le fichier dans votre presse-papiers Ouvrez maintenant votre compte github Allez dans Paramètres> Clés SSH et GPG> Nouvelle clé SSH Entrez le titre et collez la clé du presse-papiers et enregistrez-la. Voila vous avez terminé.

2
Copie utilisateur Windows via: cat ~ / .ssh / id_rsa.pub | clip
Fabii

1
Enfin, après avoir lu ici et là pendant une heure, une solution étape par étape .... fonctionne très bien. N'oubliez pas d'ajouter votre mot de passe github comme phrase secrète dans les étapes, sinon vous devrez l'ajouter manuellement à chaque fois
Afshin Ghazi

13

J'ai eu une situation légèrement différente, j'étais connecté à un serveur distant et j'utilisais git sur le serveur, lorsque j'ai exécuté une commande git, j'ai reçu le même message

   Permission denied (publickey).
   fatal: The remote end hung up unexpectedly

J'ai résolu le problème en modifiant le fichier / etc / ssh_config sur mon Mac. de

ForwardAgent no 

à

ForwardAgent yes

L'erreur s'est produite lors de la tentative de récupération des gemmes à partir de github à partir d'une machine virtuelle VirtualBox. Mise à jour de mon fichier Vagrant à utiliser config.ssh.forward_agent = true, redémarrage de la machine virtuelle et maintenant cela fonctionne.
Chris Bloom

1
Peut-être pas le meilleur choix en termes de sécurité selon cela: heipei.github.io/2015/02/26/…
Papa

13

J'ai rencontré le même problème car je pensais que la différence entre SSH et HTTPS est

https://github.com/USERNAME/REPOSITORY.git

ssh://github.com/USERNAME/REPOSITORY.git

J'ai donc changé de HTTPS à SSH juste en changeant https://en ssh://rien à la fin de l'URL a été changé.

Mais la vérité est:

https://github.com/USERNAME/REPOSITORY.git

git@github.com:USERNAME/REPOSITORY.git

Ce qui signifie que j'ai changé ssh://github.com/USERNAME/REPOSITORY.gitpourgit@github.com:USERNAME/REPOSITORY.git ça marche.

Erreur stupide mais l'espoir aide quelqu'un!


oui, j'ai changé ssh://github.com/USERNAME/REPOSITORY.gitpour que git@github.com:USERNAME/REPOSITORY.gitça marche.
William Hu

Sûr. Je dis juste que je ne vois pas l'intérêt de mentionner le https;)
OneCricketeer

Je vois parce que j'utilise juste sshau lieu de httpsdonc j'ai juste changé 'https: //' en 'ssh: // `puis j'ai eu l'erreur. Alors changez 'ssh: // git /../ `en' git @ .. /":) Modifié ma réponse.
William Hu

Ça marche pour moi. Merci beaucoup! J'ai essayé https puis ssh, mais il continue de refuser mon accès jusqu'à ce que vous fassiez votre chemin avec "git clone git@github.com: /myusername/myproject.git".
Thach Van

6

Sous Windows, assurez-vous que toutes vos applications sont d'accord sur HOME. Msys ne le fera étonnamment PAS pour vous. J'ai dû définir une variable d'environnement car ssh et git ne semblaient pas être d'accord sur l'emplacement de mon répertoire .ssh.


6

Êtes-vous dans un environnement d'entreprise ? Est-il possible que vos variables système aient récemment changé? Selon cette réponse SO, les clés ssh vivent à %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub. Donc, si %HOMEDRIVE%récemment modifié, git ne sait pas où chercher votre clé, et donc toutes les informations d'authentification.

Essayez de courir ssh -vT git@github.com. Prenez note de l'emplacement du identity file. Pour moi, cela ne pointait pas vers mon \Users\MyLoginlecteur normal mais plutôt vers un lecteur réseau, en raison d'un changement des variables d'environnement poussées au niveau du réseau.

La solution? Étant donné que mon nouveau %HOMEDRIVE%fichier dispose des mêmes autorisations que mes fichiers locaux, je viens d'y déplacer mon dossier .ssh et de l'appeler un jour.


ce travail pour moi. hier, ma clé ssh fonctionnait, mais aujourd'hui certains paramètres de mon système sont modifiés. Je viens d'ajouter à nouveau la clé shh et cela fonctionne maintenant.
Hitesh Agarwal

6

Les gars, voici comment cela a fonctionné pour moi:

  1. Ouvrez le terminal et accédez à l'utilisateur [Voir l'image jointe]
  2. Ouvrez le dossier .ssh et assurez-vous qu'il n'a pas de fichier comme id_rsa ou id_rsa.pub sinon, parfois, il ne réécrira pas correctement les fichiers
  3. git --version [Vérifier l'installation et la version de git]
  4. git config --global user.email "votre identifiant de messagerie"
  5. git config --global user.name "votre nom"
  6. git config --list [assurez-vous d'avoir défini votre nom et votre adresse e-mail]
  7. cd ~ / .ssh
  8. ssh-keygen, il vous invite à enregistrer le fichier, autorisez-le
  9. cat ~ / .ssh / id_rsa.pub [Accédez à votre clé publique et copiez la clé dans les paramètres gerrit]

Remarque : Vous ne devez pas utiliser la commande sudo avec Git. Si vous avez une très bonne raison pour laquelle vous devez utiliser sudo, assurez-vous de l'utiliser avec chaque commande (il est probablement préférable d'utiliser su pour obtenir un shell en tant que root à ce stade). Si vous générez des clés SSH sans sudo et essayez ensuite d'utiliser une commande comme sudo git push, vous n'utiliserez pas les mêmes clés que vous avez générées

entrez la description de l'image ici

entrez la description de l'image ici


5

Les instructions GIT de base ne faisaient pas référence aux éléments de clé SSH. En suivant certains des liens ci-dessus, j'ai trouvé une page d'aide git qui explique, étape par étape, exactement comment faire cela pour différents systèmes d'exploitation (le lien détectera votre système d'exploitation et redirigera, en conséquence):

http://help.github.com/set-up-git-redirect/

Il passe en revue tout ce qui est nécessaire pour GITHub et donne également des explications détaillées telles que «pourquoi ajouter une phrase secrète lors de la création d'une clé RSA». J'ai pensé que je le posterais, au cas où ça aiderait quelqu'un d'autre ...


5

L'un des moyens les plus simples

allez au terminal-

  git push <Git Remote path> --all


3

Si vous avez plusieurs clés, vous devrez peut-être le faire ssh-add private-keyfile


Merci beaucoup! C'était bien mon problème.
GoGreen

[root @ li566-238 hanjiyun] # ssh-add private-keyfile private-keyfile: Aucun fichier ou répertoire de ce type
JY Han

3

J'ai rencontré cette erreur car je devais donner à mon répertoire de travail actuel les autorisations 700:

chmod -R 700 /home/ec2-user/

3

J'ai dû copier mes clés ssh dans le dossier racine. Google Cloud Compute Engine exécutant Ubuntu 18.04

sudo cp ~/.ssh/* /root/.ssh/

2

Je viens de rencontrer ce problème lors de la configuration de mon projet actuel et aucune des solutions ci-dessus ne fonctionne. j'ai donc essayé de regarder ce qui se passe réellement sur la liste de débogage en utilisant la commande ssh -vT git@github.com. Je remarque que mon nom de fichier de clé privée n'est pas sur la liste. donc renommer le nom de fichier de la clé privée en 'id_rsa' fait le travail. j'espère que cela pourrait aider.


Inutile dans les cas où vous utilisez la clé "id_rsa" pour autre chose ....
random_user_name

2

C'est assez simple. Tapez la commande ci-dessous

ssh-keygen -t rsa -b 4096 -C "youremailid@yourdomain.com"

Générez la clé SSH. Ouvrez le fichier et copiez le contenu. Accédez à la page de configuration de GitHub et cliquez sur la clé SSH. Cliquez sur Ajouter une nouvelle clé SSH et collez le contenu ici. Voilà :) Vous ne devriez pas revoir le problème.


1

J'obtenais une erreur d'autorisation similaire refusée (publickey) lorsque j'essayais d'exécuter un makefile.

Comme alternative aux étapes SSH ci-dessus, vous pouvez installer l'application native GitHub pour Mac.

Cliquez sur Télécharger GitHub pour Mac à partir de - https://help.github.com/articles/set-up-git#platform-mac

Une fois la configuration terminée avec votre compte git hub (j'ai également installé les outils de ligne de commande git hub mais je ne sais pas si cette étape est requise ou non), j'ai reçu un e-mail -

[GitHub] Une nouvelle clé publique a été ajoutée à votre compte

et mon erreur a été corrigée.


1

J'obtenais la même erreur. Mon problème était de mixer dans sudo.

Je ne pouvais pas créer le répertoire dans lequel je clonais automatiquement sans préfixer la commande git clone avec sudo. Quand je l'ai fait, cependant, mes clés ssh n'étaient pas correctement référencées.

Pour le corriger, j'ai défini des autorisations via chmod sur le répertoire parent que je voulais contenir mon clone afin que je puisse y écrire. Ensuite, j'ai exécuté git clone SANS préfixe sudo. Cela a ensuite fonctionné! J'ai changé les autorisations après cela. Terminé.


1

J'obtenais cette erreur car j'ai généré les clés ssh avec le mauvais e-mail. J'ai pu me connecter en utilisant ssh, mais pas en utilisant git. La solution était de régénérer les clés en utilisant l'adresse e-mail principale de mon compte github.


1

Ça a marché pour moi.

Votre clé publique est enregistrée dans le fichier id_rsa.pub; et est la clé que vous téléchargez sur votre compte. Vous pouvez enregistrer cette clé dans le presse-papiers en exécutant ceci:

pbcopy <~ / .ssh / id_rsa.pub

  • copiez la clé SSH dans le presse-papiers, revenez au portail Web.
  • Dans le champ Clé SSH, collez votre clé SSH.
  • Dans le champ Nom, indiquez un nom pour la clé.
  • enregistrer .

1

Ça a marché pour moi

ssh -i [your id_rsa path] -T github@github.com

Vous préférez expliquer pourquoi votre réponse résoudrait son problème, merci.
Muhammed Refaat

1

La solution la plus simple à cela, lorsque vous essayez de pousser vers un référentiel avec un nom d'utilisateur différent est:

 git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

1

Cette étrange erreur, dans mon cas, était un symptôme de gnome-keyring-daemondénomination incorrecte de la clé à laquelle il fallait un mot de passe.

J'ai suivi les étapes décrites ici et saisi le mot de passe via le terminal. L'erreur, alias l'interface graphique confondante, a été résolue. Voir: /ubuntu/3045/how-to-disable-gnome-keyring


1

Dans mon cas, j'ai réinstallé ubuntu et le nom d'utilisateur est modifié par rapport au précédent. Dans ce cas, la clé ssh générée diffère également de la précédente.

Le problème résolu en copiant simplement la clé publique ssh actuelle, dans le référentiel. La clé sera disponible dans votre utilisateur/home/.ssh/id_rsa.pub


1

Dans mon MAC, j'ai résolu cela avec:

cp ~/.ssh/github_rsa ~/.ssh/id_rsa

Pour une raison quelconque, mon git s'est arrêté pour trouver la clé privée dans le github_rsafichier. Cela s'est produit dans un dépôt spécifique. Je veux dire que dans d'autres dépôts git a continué à fonctionner normalement.

Je pense que c'est un bug.

Je pourrais trouver ce comportement en cours d'exécution ssh -vT git@github.com

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.