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 [email protected]: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.

teepusink
la source
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

Rufinus
la source
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 "[email protected]"
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 [email protected]

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

stevek
la source
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 ( [email protected]:{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.

kavinyao
la source
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
Jarora
la source
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É

Robina Li
la source
22

Cela fonctionne pour moi:

ssh-add ~/.ssh/id_rsa
Wouter Schoofs
la source
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.

Mason Bryant
la source
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 "[email protected]"
  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é.
Zeeshan Shabbir
la source
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
Richipal
la source
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

[email protected]:USERNAME/REPOSITORY.git

Ce qui signifie que j'ai changé ssh://github.com/USERNAME/REPOSITORY.gitpour[email protected]:USERNAME/REPOSITORY.git ça marche.

Erreur stupide mais l'espoir aide quelqu'un!

William Hu
la source
oui, j'ai changé ssh://github.com/USERNAME/REPOSITORY.gitpour que [email protected]: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 [email protected]: /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.

Jason
la source
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 [email protected]. 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.

Andrew
la source
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

vikram jeet singh
la source
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 ...

gMale
la source
5

L'un des moyens les plus simples

allez au terminal-

  git push <Git Remote path> --all
Vizllx
la source
3

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

kashif
la source
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/
duhaime
la source
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/
Kandarp
la source
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 [email protected]. 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.

Rhey M.
la source
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 "[email protected]"

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.

karthik339
la source
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.

WickedW
la source
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é.

BuvinJ
la source
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.

Charles Brunet
la source
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 .
Harshikesh Kumar
la source
1

Ça a marché pour moi

ssh -i [your id_rsa path] -T [email protected]
Monsieur 陈哲
la source
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://[email protected]/USERNAME/PROJECTNAME.git
Nizar B.
la source
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

rivanov
la source
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

Sonu
la source
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 [email protected]

CelinHC
la source