183 votes

Impossible de pousser vers un dépôt Git sur Bitbucket

J'ai créé un nouveau référentiel et je rencontre une erreur étrange. J'ai déjà utilisé Git sur Bitbucket, mais je viens de reformater et maintenant je n'arrive pas à faire fonctionner Git. Après avoir effectué un commit, j'ai dû ajouter mon email et mon nom aux globaux, mais ensuite le commit s'est bien déroulé.

Lorsque j'essaie d'utiliser la commande

git push origin master

ça ne marche pas. Je reçois ce message :

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

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

Je suis un peu perdue ici. Mon ami avec qui je partage ce référentiel y a accédé sans problème et y a poussé sans problème, mais je n'arrive pas à le faire fonctionner.

262voto

Graeme Wicksted Points 381

J'écris ceci pour ceux qui commencent à utiliser Git et BitBucket sous Windows et qui ne sont pas aussi familiers avec Bash (car il s'agit à la fois d'un problème courant et d'un résultat élevé sur Google lorsqu'on recherche le message d'erreur dans la question).

Pour ceux qui ne sont pas gênés par HTTPS et qui recherchent une solution rapide, allez au bas de cette réponse pour trouver les instructions sous POUR LES PARESSEUX

Pour ceux qui cherchent à résoudre le problème réel, suivez les instructions ci-dessous :

Résolution du problème SSH aussi vite que possible

Il s'agit d'une série d'instructions dérivées de l'URL indiquée par VonC. Elle a été modifiée pour être aussi résiliente et succincte que possible.

  • Ne tapez pas le $ ou toute ligne qui ne commence pas par $ (le $ signifie que c'est quelque chose que vous tapez dans GitBash).

  • Ouvrir GitBash

Définissez vos informations globales si vous ne l'avez pas encore fait :

$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"

Vérifier l'existence d'OpenSSH :

$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...

Tu vois quelque chose comme ça ?

  • Oui, continuez.
  • Non : passez à l'étape POUR LES PARESSEUX ou suivez le lien de l'article de VonC.

Vérifiez si vous avez déjà généré les clés :

$ ls -a ~/.ssh/id_*

S'il y a deux fichiers, vous pouvez passer à l'étape suivante.

$ ssh-keygen

Laissez les valeurs par défaut et entrez une phrase de passe. Vous devriez maintenant voir des résultats avec cette commande :

$ ls -a ~/.ssh/id_*

Vérifier l'existence d'un fichier de configuration :

$ ls -a ~/.ssh/config

Si vous obtenez un résultat, vérifiez que ce fichier ne contient pas d'informations erronées. Si aucun fichier n'existe, procédez comme suit :

$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config

Confirmez le contenu :

$ cat ~/.ssh/config

Host bitbucket.org
 IdentityFile ~/.ssh/id_rsa
  • L'espace unique précédant "IdentityFile" est obligatoire.

Vérifiez que vous lancez l'agent SSH à chaque fois que vous exécutez GitBash :

$ cat ~/.bashrc
  • Si vous voyez une fonction appelée start_agent cette étape a déjà été réalisée.
  • Si aucun fichier, continuer.
  • S'il existe un fichier qui ne contient pas cette fonction, vous êtes dans une situation délicate. Il est probablement sûr d'y ajouter un fichier (en suivant les instructions ci-dessous), mais ce n'est peut-être pas le cas ! Si vous n'êtes pas sûr, faites une sauvegarde de votre fichier .bashrc avant de suivre les instructions ci-dessous ou passez directement à la page suivante POUR LES PARESSEUX section.

Entrez ce qui suit dans GitBash pour créer votre fichier .bashrc :

$ echo "SSH_ENV=$HOME/.ssh/environment" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "# start the ssh-agent" >> ~/.bashrc
$ echo "function start_agent {" >> ~/.bashrc
$ echo "    echo \"Initializing new SSH agent...\"" >> ~/.bashrc
$ echo "    # spawn ssh-agent" >> ~/.bashrc
$ echo "    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo "    echo succeeded" >> ~/.bashrc
$ echo "    chmod 600 \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo "    . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo "    /usr/bin/ssh-add" >> ~/.bashrc
$ echo "}" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "if [ -f \"\${SSH_ENV}\" ]; then" >> ~/.bashrc
$ echo "     . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo "     ps -ef | grep \${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {" >> ~/.bashrc
$ echo "        start_agent;" >> ~/.bashrc
$ echo "    }" >> ~/.bashrc
$ echo "else" >> ~/.bashrc
$ echo "    start_agent;" >> ~/.bashrc
$ echo "fi" >> ~/.bashrc

Vérifiez que le fichier a été créé avec succès (le vôtre ne devrait différer que là où apparaît "votre nom d'utilisateur") :

$ cat ~/.bashrc
SSH_ENV=/c/Users/yourusername/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi
  • Fermez GitBash et ouvrez-le à nouveau.
  • Il vous sera demandé de saisir votre phrase de passe (pour le fichier SSH que vous avez généré précédemment).
  • S'il n'y a pas d'invite, soit vous n'avez pas défini de phrase de passe, soit GitBash n'exécute pas le script script du fichier .bashrc (ce qui serait étrange, alors pensez à en vérifier le contenu !). Si vous exécutez ceci sur un Mac(OS X), .bashrc n'est pas exécuté par défaut - .bash_profile est. Pour résoudre ce problème, mettez cet extrait dans votre fichier .bash_profile : [[ -s ~/.bashrc ]] && source ~/.bashrc

Si vous n'avez pas entré de phrase de passe, vous auriez vu quelque chose comme ceci en démarrant GitBash :

Initializing new SSH agent...
succeeded
Identity added: /c/Users/yourusername/.ssh/id_rsa (/c/Users/yourusername/.ssh/id_rsa)

Et ce qui suit devrait donner des résultats :

$ ssh-add -l

Cependant, si vous obtenez ce qui suit de ssh-add -l :

Could not open a connection to your authentication agent.

Il n'a pas lancé l'agent SSH et votre .bashrc en est probablement la cause.

Si, au démarrage de GitBash, vous voyez ceci :

Initializing new SSH agent...
sh.exe": : No such file or directory

Cela signifie que vous avez oublié d'échapper le $ avec un \N lors de l'écho dans le fichier (c'est-à-dire que les variables ont été développées). Recréez votre .bashrc pour résoudre ce problème.

Vérifiez que l'agent fonctionne et que vos clés ont été ajoutées :

$ ssh-add -l

Il devrait retourner quelque chose de similaire à ceci :

2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)

Exécutez la commande suivante pour obtenir votre clé publique :

$ cat ~/.ssh/id_rsa.pub

(il devrait retourner quelque chose commençant par "ssh-rsa ......")

  • Cliquez sur l'icône de la fenêtre GitBash
  • Cliquez sur Modifier
  • Cliquez sur la marque
  • Mettez en surbrillance la clé publique à l'aide de votre souris (y compris le début de la clé). ssh-rsa et la dernière ligne == youremail@yourdomain.com bit)
  • Cliquez avec le bouton droit de la souris sur la fenêtre (effectue une copie)
  • Collez votre clé publique dans le Bloc-notes.
  • Supprimez tous les sauts de ligne de sorte qu'il n'y ait qu'une seule ligne.
  • Appuyez sur CTRL+A puis CTRL+C pour copier à nouveau la clé publique dans votre presse-papiers.

Configurez votre clé privée avec BitBucket en effectuant les étapes suivantes :

  • Ouvrez votre navigateur et accédez au site BitBucket.org site
  • Connectez-vous à BitBucket.org
  • Cliquez sur votre avatar (en haut à droite)
  • Cliquez sur Gérer le compte
  • Cliquez sur Clés SSH (sous Sécurité dans le menu de gauche)
  • Cliquez sur Ajouter une clé
  • Entrez Global Public Key pour le label
  • Collez la clé publique que vous avez copiée dans le bloc-notes.

A Global Public Key devrait maintenant être visible dans votre liste de clés.

  • Retour à GitBash
  • cd dans le répertoire contenant votre projet
  • Changez votre origine pour la variation SSH (ce ne sera pas le cas si vous avez exécuté la commande POUR LES PARESSEUX étapes)

Vérifiez vos télécommandes :

$ git remote -v

Passez à l'url SSH :

$ git remote set-url origin git@bitbucket.org:youraccount/yourproject.git

Vérifiez que tout est en état de marche :

$ git remote show origin

Vous devriez voir quelque chose comme ceci :

Warning: Permanently added the RSA host key for IP address '...' to the list of known hosts.
* remote origin
  Fetch URL: git@bitbucket.org:youruser/yourproject.git
  Push  URL: git@bitbucket.org:youruser/yourproject.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

FAIT !

Vous pouvez choisir d'utiliser HTTPS au lieu de SSH. Vous devrez alors saisir votre mot de passe lors des opérations à distance (il est mis en cache temporairement après avoir été saisi une fois). Voici comment vous pouvez configurer HTTPS :

POUR LES PARESSEUX

Vous devriez résoudre le problème de SSH comme décrit par VonC ; cependant, si vous êtes pressé de faire une livraison et que vous n'avez pas l'autorisation d'utiliser l'option outils/temps/connaissances pour générer une nouvelle clé publique à l'heure actuelle , définissez votre origine sur l'alternative HTTPS :

> https://accountname@bitbucket.org/accountname/reponame.git

En utilisant un outil GUI tel que TortoiseGit o outils de ligne de commande .

Voici la documentation de cette URL d'origine alternative.

Ligne de commande pour ajouter une origine si elle n'existe pas :

git remote add origin https://accountname@bitbucket.org/accountname/reponame.git

Ligne de commande pour modifier une origine existante :

git remote set-url origin https://accountname@bitbucket.org/accountname/reponame.git

REMARQUE : le nom de votre compte n'est pas votre adresse électronique.

Vous pouvez également définir vos informations globales :

git config --global user.name "Your Name"
git config --global user.email "you@example.com"

Ensuite, réessayez votre poussée (pas besoin de s'engager à nouveau).

git push origin master

81voto

Matthias Braun Points 1114

Cette erreur se produit également si vous avez oublié d'ajouter la clé privée à ssh-agent . Faites-le avec :

ssh-add ~/.ssh/id_rsa

33voto

VonC Points 414372

Mise à jour 2021, comme a commenté par James :

J'ai dû ajouter ma clé à la espace de travail au lieu d'une base "par référentiel".

Puisque ces clés sont en lecture seule, et que celles de l'espace de travail permettent de pousser.

bitbucket.org/<my-workspace>/workspace/settings/ssh-keys 

Assurez-vous simplement de supprimer les mêmes clés des dépôts enfants, sinon vous ne pourrez pas les ajouter à l'espace de travail.


Original Answer (2013) :

Reformaté signifie que vous avez probablement supprimé vos clés ssh publiques et privées (dans ~/.ssh).

Vous devez les régénérer et publier votre clé ssh publique sur votre profil BitBucket, comme indiqué dans " Utiliser le protocole SSH avec Bitbucket ", suivant " Configurer SSH pour Git avec GitBash ".

Comptes->Gestion des comptes->Clefs SSH :

http://solvedproblems.hydex11.net/_media/solved-problems/crazy-problems/bitbucket_manage_account.png

Ensuite :

http://solvedproblems.hydex11.net/_media/solved-problems/crazy-problems/bitbucket_add_ssh.png

Images de " Intégration de Mercurial/BitBucket avec les logiciels JetBrains "

27voto

Ankit Arora Points 251

J'ai résolu ce problème en supprimant la télécommande à l'aide de la commande :

git remote remove origin

et ensuite j'ai essayé d'ajouter la télécommande en utilisant l'url https au lieu de ssh.

git remote add origin httpsUrl

Il demande les informations d'identification de Github. Entrez les informations d'identification et essayez ensuite de pousser vers git en utilisant :

git push origin master

6voto

Rafael Points 2948

J'ai eu le même problème. Mes clés SSH étaient correctement configurées. J'ai résolu ce problème comme ceci.

Après avoir créé un nouveau projet dans Bitbucket, utilisez clone. Entrez la commande de clonage dans le terminal et cela devrait cloner le projet vide sur votre ordinateur. Après cela, vous pouvez copier vos fichiers dans ce répertoire et commencer à commiter et à pousser vers Bitbucket.

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