Autorisation Github refusée: l'agent d'ajout ssh n'a aucune identité

148

C'est la première fois que j'accède à GitHub et je n'ai pas l'expérience de l'utilisation d'une console. Je suis sur un MacBook utilisant Bash. Lorsque j'essaye d'accéder à GitHub, j'obtiens ceci:

git clone git@github.com:dhulihan/league-of-legends-data-scraper.git
Cloning into 'league-of-legends-data-scraper'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

J'ai essayé de suivre les instructions sur la page Github concernant le refus d'autorisation.

Quand j'utilise ssh -vT [email protected], j'obtiens ce qui suit:

OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to github.com [192.30.252.129] port 22.
debug1: Connection established.
debug1: identity file /Users/XXXX/.ssh/id_rsa type -1
debug1: identity file /Users/XXXX/.ssh/id_rsa-cert type -1
debug1: identity file /Users/XXXX/.ssh/id_dsa type -1
debug1: identity file /Users/XXXX/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version libssh-0.6.0
debug1: no match: libssh-0.6.0
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-sha1 none
debug1: kex: client->server aes128-ctr hmac-sha1 none
debug1: sending SSH2_MSG_KEXDH_INIT
debug1: expecting SSH2_MSG_KEXDH_REPLY
debug1: Server host key: RSA 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /Users/XXXX/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /Users/XXXX/.ssh/id_rsa
debug1: Trying private key: /Users/XXXX/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

Ensuite, eval "$(ssh-agent -s)"renvoie «Agent pid 2314», mais ssh-add -lrenvoie «L'agent n'a pas d'identité».

Et c'est là que je suis coincé.

Sombre
la source
Avez - vous avez une clé SSH créé? L'avez-vous répertorié avec votre compte github? Avez-vous la clé sur votre mac?
Etan Reisner
Je cherchais la réponse à cette question (n'étant pas familier avec tout ce système), et j'ai trouvé ceci: mac.github.com Cela a résolu tous mes problèmes. Je le recommande fortement. Merci pour la poussée dans la bonne direction, Etan!
sombre
4
Vous voudrez peut-être ajouter une réponse à cette question (avec plus de détails sur la façon dont cela a résolu votre problème) et accepter votre réponse.
Etan Reisner
D'accord, j'ai soumis la réponse. SO me dit que je ne peux l'accepter que dans 2 heures.
noir

Réponses:

194

Tous les détails dans cette réponse .

En résumé, lorsque les ssh-add -lrendements « L'agent n'a pas l' identité », cela signifie que les clés utilisées par ssh(stockées dans des fichiers tels que ~/.ssh/id_rsa, ~/.ssh/id_dsa, etc.) sont soit manquants, ils ne sont pas connues ssh-agent, ce qui est l'agent d'authentification, ou que leurs autorisations sont définis de manière incorrecte (par exemple, monde inscriptible).

Si vos clés manquent ou si vous n'en avez pas généré, utilisez ssh-keygen -t rsa, puis ssh-addpour les ajouter.

Si des clés existent mais ne sont pas connues ssh-agent(comme si elles sont dans un dossier non standard), utilisez ssh-add /path/to/my-non-standard-ssh-folder/id_rsapour les ajouter.

Consultez cette réponse si vous rencontrez des problèmes avec ssh-addou  ssh-agent.

John Doedoe
la source
4
Merci @Doedoe pour un lien vers une réponse courte et agréable. Et pour ceux qui ont des keyS (c'est-à-dire plusieurs comptes Git), vous devrez peut-être utiliser ssh-add /path/to/keyXpour chacun, surtout s'ils ont des noms non standard. Détails ici: stackoverflow.com/questions/3225862/… (une belle réponse)
tuk0z
Merci pour cela. Je suis resté coincé ici ... mais j'ai réalisé que je devais exécuter à ssh-add nouveau après avoir résolu la partie autorisations du problème. Après cela, ssh -vT [email protected]n'a pas fonctionné. J'ai eu besoin d'ajouter le chemin absolu comme le commentateur mentionné ci-dessus. Ensuite, tout était de la sauce.
jungledev
2
Dans le second cas, j'ai oublié ma phrase de passe et je l'ai récupérée en utilisant help.github.com/articles/how-do-i-recover-my-ssh-key-passphrase
Malder
111

essaye ça:

ssh-add ~/.ssh/id_rsa

travaillé pour moi

Boltun Oreh
la source
5
Salut, bienvenue à SO. Veuillez expliquer votre code afin que vos collègues utilisateurs puissent comprendre ce qui se passe. À votre santé.
Cthulhu
4
Lorsque vous redémarrez, vos clés ont disparu et vous devez les «ajouter» à nouveau.
Louwki
@Louwki Ouais ... c'est super ennuyeux. Connaissez-vous un moyen de contourner cela?
Chris Cirefice
3
@ChrisCirefice faites simplement le ssh-add avec un paramètre pour les ajouter à votre trousseau de façon permanente. ssh-add -K ~ / .ssh / [votre-clé-privée]
Louwki
1
Dans mon cas, les autorisations de fichier étaient incorrectes pour la clé privée. Fixé par chmod 600 ~/.ssh/id_rsa, alorsssh-add ~/.ssh/id_rsa
Morteza Ziyae
39

LA RÉPONSE 2019 pour macOS Sierra, High Sierra et Catalina:

PS: la plupart des autres réponses vous obligeront à créer une nouvelle clé ssh ... mais vous n'avez pas besoin de le faire :)

Comme décrit en détail sur https://openradar.appspot.com/27348363 , macOS / OS X jusqu'à ce que Yosemite se souvienne des clés SSH ajoutées par commandessh-add -K <key>

Voici donc les 4 étapes que j'ai dû suivre pour que cela fonctionne:

1: ssh-add ~/.ssh/PATH_TO_YOUR_SSH_PRIVATE_KEY (e.g. ~/.ssh/id_rsa)

2: Ajoutez ce qui suit dans~/.ssh/config

Host * 
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile PATH_TO_YOUR_SSH_PRIVATE_KEY (e.g. ~/.ssh/id_rsa)

3: assurez-vous de supprimer toute entrée gitconfig qui utilise osxkeychain helper:

 https://github.com/gregory/dotfiles/commit/e38000527fb1a82b577f2dcf685aeefd3b78a609#diff-6cb0f77b38346e0fed47293bdc6430c6L48

4: redémarrez votre terminal pour qu'il prenne effet.

metakungfu
la source
3
Excellente réponse, j'allais le mentionner moi-même! Apparemment, OS X 10.12.2 et versions ultérieures ne charge pas automatiquement les identités dans ssh-agent (ce que je pense personnellement est une décision d'utilisation vraiment stupide, mais je comprends les implications de sécurité). Vous devez donc modifier la configuration SSH pour les charger manuellement. Je souhaite juste que la sortie d'erreur conduise mieux à une solution, plutôt qu'à une heure de recherche sur Internet.
Chris Cirefice
12

J'ai été coincé pendant un certain temps sur le même problème, que j'ai finalement résolu.

Mon problème : je n'ai pas pu exécuter de push. Je pouvais vérifier et voir ma télécommande (en utilisant git remote -v), mais quand j'ai exécuté git push origin master, elle est revenue: Permission denied (publickey). fatal: Could not read from remote repository.et ainsi.

Comment je l'ai résolu:

  • J'ai généré une clé en utilisantssh-keygen -t rsa . Entrer un nom pour le fichier de clé (lorsqu'on lui a demandé) était inutile.
  • Je pourrais alors ajouter la clé (à git) : ssh-add /Users/federico/.ssh/id_rsaqui avec succès retournéIdentity added: /Users/myname/.ssh/id_rsa (/Users/myname/.ssh/id_rsa)
  • J'ai ajouté la clé SSH à github en utilisant cette page d'aide .
  • Après avoir essayé toutes les commandes de la page d'aide 'Permission refusée publickey' de Github, seule la ssh-add -lcommande a fonctionné / semblait utile (après avoir exécuté les étapes précédentes), elle a renvoyé ma clé avec succès. La dernière étape vous montre où vérifier votre clé publique sur votre page GitHub. Et cette commande vous aidera à vérifier toutes vos clés: ls -al ~/.ssh.

Ensuite, la commande push a finalement fonctionné!

J'espère que cela aidera! Bonne chance à tous.

Fed Zee
la source
7

Exécutez les commandes suivantes:

ssh-keygen -t rsa
ssh-add /Users/*yourUserNameHere*/.ssh/id_rsa** 
pbcopy < ~/.ssh/id_rsa.pub**

Accédez à votre compte Github: https://github.com/settings/profile

1) Cliquez sur: clés SSH et GPG

2) Nouvelle clé SSH et collez-la là

3) Ajouter une clé SSH

Terminé!

zouhair khallaf
la source
Ouais - si vous avez suivi les autres étapes de création du fichier id_rsa.pub, copiez et collez cette ligne pbcopy, qui copie la clé dans votre presse-papiers et suivez les instructions @zouhair - github doit connaître votre clé. Surtout si vous utilisez 2FA.
davidrynn
Je suis un peu confus car la documentation actuelle dit que git crée github_rsa / github_rsa.pub. J'ai les deux dans mon répertoire /.ssh et pourtant je n'arrive pas à "obtenir la permission". J'ai créé des copies dans le même répertoire en utilisant l'id_rsa en vain.
Mark Löwe
6

tout d'abord vous devez aller dans votre répertoire ssh
pour ce type en suivant la commande dans votre terminal sous mac ou tout ce que vous utilisez dans window

cd ~/.ssh

maintenant c'est dans le ssh
ici que vous pouvez trouver toutes vos clés / fichiers ssh liés à tous vos projets. maintenant, tapez la commande suivante pour vous montrer si une clé ssh est disponible

ls

cela vous montrera tous les ssh disponibles, dans mon cas, il y en avait deux
maintenant, vous devrez démarrer un agent pour y ajouter un ssh. Pour ce type commande suivante

eval "$(ssh-agent -s)"

maintenant le dernier mais non le moindre, vous allez ajouter un ssh dans ce type d'agent en suivant la commande

ssh-add ~/.ssh/your-ssh

remplacer

remplacez votre-ssh par votre nom de fichier ssh dont vous avez obtenu une liste sous forme de deuxième étape ls command

Sultan Ali
la source
5

Cela pourrait entraîner pour tout nouveau terminal, l'ID de l'agent est différent. Vous devez ajouter la clé privée de l'agent

$ ssh-add <path to your private key>
user9253738
la source
1

Un élément supplémentaire que j'ai réalisé est que le dossier .ssh est généralement créé dans votre dossier racine dans Mac OS X / Users /. Si vous essayez d'utiliser ssh -vT [email protected] à partir d'un autre dossier, cela vous donnera une erreur même si vous avez ajouté la bonne clé.

Vous devez à nouveau ajouter la clé (ssh-add 'chemin correct vers id_rsa') à partir du dossier actuel pour vous authentifier avec succès (en supposant que vous avez déjà téléchargé la clé sur votre profil dans Git)

Varghese Cherian
la source
1

Cela a fonctionné pour moi:
chmod 700 .ssh chmod 600 .ssh/id_rsa chmod 644 .ssh/id_rsa.pub

Ensuite, tapez ceci: ssh-add ~/.ssh/id_rsa

Nacho Cornejo
la source
Je ne pense pas que la question concerne les ~/.sshautorisations. Néanmoins, vous pouvez grandement améliorer votre réponse en ajoutant la commande complète (ici chmod) et en expliquant ce que cela fait et pourquoi c'est nécessaire.
Robert
0

Après avoir lutté pendant longtemps, j'ai finalement pu résoudre ce problème sous Windows, pour moi, la variable d'environnement utilisateur GIT_SSH a été définie pour pointer vers

"C: \ Program Files (x86) \ WinScp \ PuTTY \ plink.exe"

qui a été installé avec WinScp. J'ai changé le pointage pour utiliser ssh.exe par défaut qui est livré avec git-scm "C: \ Program Files \ Git \ usr \ bin \ ssh.exe"

Santan
la source
0

Étapes pour BitBucket:

si vous ne voulez pas générer de nouvelle clé, SKIP ssh-keygen

ssh-keygen -t rsa 

Copiez la clé publique dans le presse-papiers:

clip < ~/.ssh/id_rsa.pub

Connectez-vous à Bit Bucket: Accédez à Afficher le profil -> Paramètres -> Clés SSH (dans l'onglet Sécurité) Cliquez sur Ajouter une clé, collez la clé dans la boîte, ajoutez un titre descriptif

Revenez à Git Bash:

ssh-add -l

Tu devrais obtenir :

2048 SHA256:5zabdekjjjaalajafjLIa3Gl/k832A /c/Users/username/.ssh/id_rsa (RSA)

Maintenant: git pulldevrait fonctionner

ForeverLearner
la source
0

J'ai eu ce problème après avoir restauré un disque dur à partir d'une sauvegarde.

Mon problème: je pouvais vérifier et voir ma télécommande (en utilisant git remote -v), mais quand j'ai exécuté git push origin master, elle a renvoyé: Permission refusée (publickey). fatal: impossible de lire à partir du référentiel distant.

J'avais déjà un dossier SSH et des clés SSH, et les ajouter via Terminal ( ssh-add /path/to/my-ssh-folder/id_rsa) a ajouté avec succès mon identité, mais je ne pouvais toujours pas pousser et j'ai toujours la même erreur. Générer une nouvelle clé était une mauvaise idée pour moi, car elle était liée à d'autres autorisations très sécurisées sur AWS.

Il s'est avéré que le lien entre la clé et mon profil Github s'était rompu.

Solution: le réajout de la clé à Github dans Profil> Paramètres> Clés SSH et GPG a résolu le problème.

Aussi: mon compte avait une authentification à 2 facteurs configurée. Dans ce cas, si le terminal demande des informations d'identification, utilisez votre nom d'utilisateur - mais PAS votre mot de passe Github. Pour l'authentification à 2 facteurs, vous devez utiliser votre code d'authentification (pour moi, cela a été généré par Authy sur mon téléphone, et j'ai dû le copier dans Terminal pour le pw).

Deborah
la source