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.
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