web-dev-qa-db-fra.com

Comment résoudre l'erreur Permission denied (publickey) lors de l'utilisation de Git?

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

Je viens d'essayer 

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 faire ssh-keygen sans mot de passe mais avec la même erreur.

492
teepusink

l'utilisateur n'a-t-il pas généré de paire de clés publique/privée ssh auparavant?

Cette information fonctionne sur theChaw mais peut être appliquée à tous les autres référentiels git prenant en charge l'authentification par clé publique SSH. (Voir gitolite , gitlab ou github par exemple.)

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

  • D'abord, vous voudrez vous connecter à votre répertoire .ssh. Ouvrez le terminal et lancez:

    cd ~/.ssh && ssh-keygen

  • Ensuite, vous devez copier ceci dans votre presse-papier.
    • 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.
  • 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)

C'est ça, vous devriez être bon à cloner et à la caisse.

De plus amples informations sont disponibles sur https://help.github.com/articles/generating-ssh-keys (merci à @Lee Whitney) -

l'utilisateur a-t-il déjà créé une paire de clés publique/privée ssh?

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

eval $(ssh-agent -s)

dire où sont les clés

ssh-add ~/.ssh/id_rsa

669
Rufinus

Un dépannage plus complet 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/

175
nottinhill

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

Parfois, vous voulez simplement cloner votre propre repo, 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 il s'agit de votre propre repo, GitHub peut afficher l'URL SSH si tel est votre choix. Dans cette situation, si la clé publique de votre hôte distant ne se trouve pas dans vos clés GitHub SSH, votre accès sera refusé, ce qui devrait se produire .

Un cas équivalent est lorsque vous essayez de cloner le dépôt de quelqu'un d'autre auquel vous n'avez pas accès en écriture avec l'URL SSH.

Dans un mot, si votre intention est de cloner uniquement un référentiel, 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 (inutile) de clés publiques.


Mise à jour: GitHub affiche maintenant le protocole HTTPS en tant que protocole par défaut, ce qui pourrait probablement réduire l'utilisation abusive d'adresses URL SSH.

138
kavinyao

Le github help link m'a aidé à résoudre ce problème. On dirait que la clé ssh n'a pas été ajoutée à ssh-agent. C'est ce que j'ai fini par faire. 

Commande 1:

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

eval "$(ssh-agent -s)"

Commande 2:

Ajoutez votre clé SSH à ssh-agent:

ssh-add ~/.ssh/id_rsa
85
jarora

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

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

Changer l'URL en HTTP quand cloner:

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

Mon problème est un peu différent : L'URL est définie lors de l'ajout d'un dépôt local existant à distance, en utilisant

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

Pour résoudre ce problème, 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É

17
Robina Li

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

Examinez 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é, commencez par en créer une. Voir: http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/internet/node31.html ou tout simplement Google ssh-keygen)

Pour vérifier qu'une clé est associée à votre compte github:

Allez à: 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 vus lorsque vous avez tapé ssh-add -l il y a une minute.

Si vous ne le faites pas, ajoutez-en un, puis réessayez.

17
Mason Bryant

Cela fonctionne pour moi:

ssh-add ~/.ssh/id_rsa
16
Wouter Schoofs

J'ai eu une situation légèrement différente, j'étais connecté à un serveur distant et 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 corrigé le problème en modifiant le fichier/etc/ssh_config sur mon Mac. de

ForwardAgent no 

à 

ForwardAgent yes
12
Richipal

J'ai rencontré le même problème parce que je pensais que la différence entreSSHetHTTPSest 

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

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

J'ai donc changé deHTTPSàSSHen changeant simplement https:// en ssh:// rien à la fin de l'URL n'a été modifié.

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.git en [email protected]:USERNAME/REPOSITORY.git cela fonctionne.

Erreur stupide mais espoir aide quelqu'un!

10
William Hu

Sous Windows, assurez-vous que toutes vos applications sont d'accord sur HOME. De manière surprenante, Msys ne le fera PAS pour vous. J'ai dû définir une variable d'environnement car ssh et git ne parvenaient pas à se mettre d'accord sur l'emplacement de mon répertoire .ssh.

6
Jason

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

1- Ouvrir le terminal et accéder à l'utilisateur [Voir l'image ci-jointe]

2- Ouvrez le dossier .ssh et assurez-vous qu'il ne contient aucun fichier tel que id_rsa ou id_rsa.pub, sinon, il ne sera pas correctement réécrit

3 - git --version [Vérifiez 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 que vous avez défini votre nom et votre email]

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]

Note: Vous ne devriez pas utiliser la commande Sudo avec Git. Si vous avez une très bonne raison d'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 qu'utilisateur root à ce moment-là). Si vous générez des clés SSH sans Sudo et essayez ensuite d'utiliser une commande telle que Sudo git Push, vous n'utiliserez pas les mêmes clés que vous avez générées.

 enter image description here

 enter image description here

5

Les instructions GIT de base ne font pas référence aux éléments de clé SSH. En suivant certains des liens ci-dessus, j'ai trouvé une page d'aide de git qui explique, étape par étape, comment procéder pour différents systèmes d'exploitation (le lien détectera votre système d'exploitation et vous 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é le poster, au cas où cela aiderait quelqu'un d'autre ...

5
gMale

L'un des moyen le plus simple  

aller au terminal-

  git Push <Git Remote path> --all
4
Vizllx

Êtes-vous dans un environnement d'entreprise ? Est-il possible que vos variables système aient récemment changé? Par this _ SO réponse, les clés ssh résident à %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub. Donc, si %HOMEDRIVE% a récemment changé, git ne sait pas où chercher votre clé, et donc tout le reste de l'authentification. 

Essayez d'exécuter ssh -vT [email protected]. Prenez note de l'emplacement du identity file. Pour moi, il s'agissait de non pointant vers mon \Users\MyLogin normal mais plutôt vers un lecteur réseau, en raison d'une modification des variables d'environnement transférées au niveau du réseau.

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

4
Andrew

Si vous avez plus d’une clé, vous devrez peut-être utiliser ssh-add private-keyfile

3
kashif

En plus de la réponse de Rufinus, le raccourci pour copier votre clé ssh dans le presse-papiers dans Windows est:

  • type id_rsa.pub | clip

Refs:

3
Jonathan

Je viens d’éprouver ce problème lors de la définition de mon projet actuel et aucune des solutions ci-dessus ne fonctionne. J'ai donc essayé de regarder ce qui se passait 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 ne figure pas dans la liste. alors renommer le nom de fichier de clé privée en 'id_rsa' faire le travail. espérons que cela pourrait aider.

2
Rhey M.

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 GitHub, puis cliquez sur la clé SSH. Cliquez sur Ajouter une nouvelle clé SSH et collez le contenu ici. Ça y est :) Vous ne devriez plus voir le problème.

2
karthik339

J'ai frappé cette erreur parce que je devais donner à mon présent répertoire de travail les autorisations 700

chmod -R 700 /home/ec2-user/
1
duhaime

J'obtenais une erreur similaire autorisation refusée (publickey) lorsque j'essayais de lancer un fichier makefile.

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

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 de git hub, mais je ne sais pas si cette étape est requise ou non), puis j'ai reçu un courrier électronique -

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

et mon erreur a été corrigée.

1
WickedW

Ça a fonctionné pour moi

ssh -i [your id_rsa path] -T [email protected]
1
Mr陈哲

Dans mon cas, j’ai réinstallé Ubuntu et le nom d’utilisateur est modifié. 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 le /home/.ssh/id_rsa.pub de votre utilisateur

1
Sonu

Dans mon MAC, j'ai résolu ceci 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 fichier github_rsa. Cela s'est passé dans un repo 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]

1
CelinHC

Cette erreur étrange, dans mon cas, était un symptôme de gnome-keyring-daemon en nommant de manière incorrecte la clé pour laquelle elle nécessitait un mot de passe.

Je suis les étapes décrites ici et saisis le mot de passe via le terminal. L’erreur, appelée interface graphique confuse, a été résolue ... Voir: https://askubuntu.com/questions/3045/how-to-disable-gnome-keyring

1
rivanov

Cela a fonctionné pour moi.

Votre clé publique est enregistrée dans le fichier id_rsa.pub; elle est la clé que vous avez téléchargée sur votre compte. Vous pouvez sauvegarder cette clé dans le presse-papier en lançant 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, attribuez un nom à la clé.
  • enregistrer .
1
Harshikesh Kumar

Je recevais cette erreur parce que j'ai généré les clés SSH avec le mauvais email. Je pouvais me connecter en utilisant ssh, mais pas avec git. La solution consistait à régénérer les clés à l'aide de l'adresse de messagerie principale de mon compte github.

1
Charles Brunet

J'avais la même erreur. Mon problème était de mélanger à Sudo. 

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

Pour résoudre ce problème, j'ai défini des autorisations via chmod sur le répertoire parent dans lequel je voulais contenir mon clone afin de pouvoir y écrire. Ensuite, j'ai exécuté git clone SANS le préfixe Sudo. Cela a ensuite fonctionné! J'ai changé les autorisations par la suite. Terminé.

1
BuvinJ

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

 git remote set-url Origin https://[email protected]/USERNAME/PROJECTNAME.git
1
Nizar B.

J'ai pu surmonter ce problème en suivant les étapes ci-dessous de mon système Ubuntu. Comme je faisais des essais avec SSH sans mot de passe au système.

Sudo vi/etc/ssh/sshd_config

1) Commenté ci-dessous: #Changez en pour désactiver les mots de passe en texte clair tunnelés #PasswordAuthentication oui PasswordAuthentication no ----> a commenté ceci. 

2) Ensuite, redémarrez le démon sshd comme indiqué ci-dessous.

service sshd redémarrer

0
lambzee

Étapes pour Mac:

  1. Changer d'utilisateur (Sudo su - jenkins)
  2. Générez la clé (ssh-keygen -t rsa -b 4096 -C "nom d'utilisateur"). Nom d'utilisateur est celui avec lequel vous utilisez jenkins.
  3. Copier la clé publique générée (cat ~/.ssh/id_rsa.pub).
  4. Collez la clé dans le compte git. (Paramètres -> Touches SSH et CPG -> Nouvelles touches Ssh -> Entrez le nom de la clé (n'importe laquelle) et collez la clé dans Description).
0
Abhishek Bais

Tout d'abord, je vous recommande de vérifier certaines choses standard telles que:

  • connectez-vous en tant qu'utilisateur correct dans votre système,
  • avoir la clé privée right au bon emplacement dans votre système,
  • essayez de vous connecter avec le bon nom d'utilisateur , nom d'hôte et port ,
  • avoir la clé publique au bon emplacement (et pour le bon utilisateur) sur le serveur externe,
  • redémarre le service ssh sur votre ordinateur:
 service ssh redémarrer 

C'était suffisant pour moi.

0
simhumileco
$ cd ~
$ cd .ssh
$ chmod 400 id_rsa
0
539f

Utilisez le lien ssh de Github mais veillez à ne pas l'ajouter à ssh. Utilisez simplement ce que l'onglet ssh de git hub vous permet de cloner votre rapport.

0
pal4life

Permettez-moi de partager mon expérience aussi,

J'essayais de cloner un projet du dépôt Gerrit où j'ai obtenu mes clés publiques dans les paramètres de compte.

Lors de la première tentative de création de git clone, l'erreur suivante s'est produite:

Unable to negotiate with XX.XX.XX.XX port XXX: no matching key exchange
method found. Their offer: diffie-hellman-group1-sha1

J'ai compris que je devais passer l'option SSH -oKexAlgorithms=+diffie-hellman-group1-sha1 à git clone.

J'espère que la variable d'environnement GIT_SSH_COMMAND a fait le travail:

export GIT_SSH_COMMAND="ssh -oKexAlgorithms=+diffie-hellman-group1-sha1"

Mais git clone n'a toujours pas commencé à fonctionner .. Maintenant, il lance le (sur le sujet):

Permission denied (publickey).

J'ai déjà des clés SSH et je ne voulais pas les régénérer. J'ai vérifié la connexion SSH avec l'hôte et tout s'est bien passé:

****    Welcome to Gerrit Code Review    ****

  Hi XXXXX, you have successfully connected over SSH.

  Unfortunately, interactive shells are disabled.
  To clone a hosted Git repository, use:

  git clone ssh://[email protected]:xxx/REPOSITORY_NAME.git

J'étais un peu confus. J'ai recommencé et activé le débogage pour SSH via l'option -vvv. Et j'ai vu ce qui suit:

debug1: read_passphrase: can't open /dev/tty: No such device or address

Il s’agissait peut-être d’une surcharge de la variable GIT_SSH_COMMAND env. Ma clé était sécurisée par une phrase secrète (et je l’ai saisie lors de la vérification de la connexion à l’hôte git repo).

J'ai donc décidé de me débarrasser de la phasphrase. Une simple commande m'a aidé:

ssh-keygen -p

Ensuite, je suis entré dans mon mot de passe pour "l'ancien mot de passe" et j'ai juste tapé ENTER deux fois sur le "nouveau mot de passe" pour le laisser vide, c’est-à-dire sans mot de passe composé, et pour confirmer mon choix.

Après cela, j'ai reçu le référentiel fraîchement cloné sur mon disque local.

0
rook

Exécutez le terminal en tant qu'administrateur.

Si le terminal ne peut pas voir votre .ssh, il renverra cette erreur.

0
Raul Barros