Git clone / pull se fige continuellement à "Stocker la clé dans le cache?"

160

J'essaie de cloner un dépôt de mon compte BitBucket sur mon ordinateur portable Windows 10 (exécutant GitBash). J'ai terminé toutes les étapes nécessaires pour me connecter (configuration de ma clé SSH, vérifiée par SSHing [email protected], etc.). Cependant, chaque fois que je tente de cloner un repo, l'invite raccroche continuellement après avoir confirmé que je souhaite mettre en cache la clé de Bitbucket.

User@Laptop MINGW64 /C/Repos
$ git clone [email protected]:mygbid/test.git
Cloning into 'test'...
The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n) y

Aucun fichier n'est cloné et le résultat est un dépôt vide. Essayer d'initier un maître d'origine git pull à partir de ce dépôt demande également de mettre en cache la clé, puis se bloque sans retour. Bien que je ne demande pas que la clé soit mise en cache lorsque je fais un test SSH, les opérations git demandent toujours la clé à chaque fois avant d'échouer.

En l'absence de messages d'erreur avec lesquels travailler, je ne sais vraiment pas ce qui ne va pas. J'ai essayé plusieurs dépôts, y compris de très petits, sans aucun succès.

MarathonStudios
la source

Réponses:

189

J'ai également eu ce problème lors du clonage d'un dépôt sur Windows 10.

Je l'ai contourné en utilisant l'interface graphique Putty vers SSH sur le serveur en question (dans votre cas: bitbucket.org), puis j'ai cliqué sur `` Oui '' lorsque l'invite vous demande si vous souhaitez enregistrer la clé du serveur dans le cache. Exécuter à nouveau la commande clone a ensuite fonctionné pour moi!

theChumpus
la source
21
Cela ne m'a pas directement résolu, mais cela m'a amené à réaliser que le problème était lié à GitBash utilisant Putty pour l'authentification ssh au lieu d'OpenSSH. Lorsque j'ai supprimé la variable système GIT_SSH et réinitialisé GitBash, tout fonctionne correctement. Merci!
MarathonStudios
2
Utiliser puttypour ajouter une githubclé dans le cache a fonctionné pour moi
chêne
4
Cela a fonctionné pour moi sur Win 7 en utilisant la console de commande. Je souhaite que quelqu'un puisse me dire pourquoi cela s'est produit plutôt qu'une simple solution de contournement.
soulsabr
1
quelqu'un peut-il dire comment faire ci-dessus ladite solution
Shreyan Mehta
2
@Shreyan Mehta vient d'ouvrir putty, sous le nom d'hôte collez [email protected] (ou quel que soit l'hôte que vous utilisez). Assurez-vous de sélectionner le type de connexion SSH. Le numéro de port doit être 22. Assurez-vous également que la clé ssh est chargée dans pageant avant de le lancer.
Mr.Invisible le
111
  1. Mastic ouvert
  2. Tapez le nom d'hôte (comme bitbucket.org)
  3. Cliquez sur Ouvrir
  4. Cliquez sur Oui dans la fenêtre contextuelle pour mettre en cache la clé d'hôte
  5. Fermer le mastic
excentrique
la source
J'ai eu le même problème. En regardant la sortie de git, il semble que git ne parvienne pas à mettre en cache la clé d'hôte (probablement un bogue). Vous devez donc le faire en utilisant l'interface graphique de PuTTY.
cambunctious le
J'ai essayé toutes les étapes, mais lorsque je sélectionne `` y '' ou `` n '' rien ne s'est passé, Git Bash ne fait rien
tests du
Avez-vous saisi le bon nom d'hôte à l'étape 2? Avez-vous essayé de redémarrer Git Bash?
cambunctious
1
En quoi est-ce différent de la réponse acceptée?
zb226
1
J'ai voté cette réponse car elle fournit des étapes. Je n'aime pas la façon dont c'est une solution de contournement (vous devez répéter cela pour chaque serveur SSH que vous connectez), tout comme la réponse acceptée.
ShooShoSha
26

Pour ce faire à partir de PowerShell, ouvrez une fenêtre PowerShell et collez ce qui suit:

echo y | & 'C:\Program Files (x86)\GitExtensions\PuTTY\plink.exe' -ssh [email protected]
echo y | & 'C:\Program Files (x86)\GitExtensions\PuTTY\plink.exe' -ssh [email protected]
echo y | & 'C:\Program Files (x86)\GitExtensions\PuTTY\plink.exe' -ssh [email protected]

ou avec la version autonome de PuTTY:

echo y | & 'C:\Program Files (x86)\PuTTY\plink.exe' -ssh [email protected]
echo y | & 'C:\Program Files (x86)\PuTTY\plink.exe' -ssh [email protected]
echo y | & 'C:\Program Files (x86)\PuTTY\plink.exe' -ssh [email protected]

Il convient également de savoir que putty stocke les hôtes connus sous une clé de registre :

HKEY_CURRENT_USER\SoftWare\SimonTatham\PuTTY\SshHostKeys

Pour raccourcir ce qui précède, vous pouvez mettre ce qui suit dans un .regfichier et l'exécuter:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\SshHostKeys]
"rsa2@22:github.com"="0x23,0xab603b8511a67679bdb540db3bd2034b004ae936d06be3d760f08fcbaadb4eb4edc3b3c791c70aae9a74c95869e4774421c2abea92e554305f38b5fd414b3208e574c337e320936518462c7652c98b31e16e7da6523bd200742a6444d83fcd5e1732d03673c7b7811555487b55f0c4494f3829ece60f94255a95cb9af537d7fc8c7fe49ef318474ef2920992052265b0a06ea66d4a167fd9f3a48a1a4a307ec1eaaa5149a969a6ac5d56a5ef627e517d81fb644f5b745c4f478ecd082a9492f744aad326f76c8c4dc9100bc6ab79461d2657cb6f06dec92e6b64a6562ff0e32084ea06ce0ea9d35a583bfb00bad38c9d19703c549892e5aa78dc95e250514069"
"rsa2@22:gist.github.com"="0x23,0xab603b8511a67679bdb540db3bd2034b004ae936d06be3d760f08fcbaadb4eb4edc3b3c791c70aae9a74c95869e4774421c2abea92e554305f38b5fd414b3208e574c337e320936518462c7652c98b31e16e7da6523bd200742a6444d83fcd5e1732d03673c7b7811555487b55f0c4494f3829ece60f94255a95cb9af537d7fc8c7fe49ef318474ef2920992052265b0a06ea66d4a167fd9f3a48a1a4a307ec1eaaa5149a969a6ac5d56a5ef627e517d81fb644f5b745c4f478ecd082a9492f744aad326f76c8c4dc9100bc6ab79461d2657cb6f06dec92e6b64a6562ff0e32084ea06ce0ea9d35a583bfb00bad38c9d19703c549892e5aa78dc95e250514069"
"rsa2@22:bitbucket.org"="0x23,0xb9b88df3578371a7eb80c78bcda14fb30da436f11ca932a5fd5a8b6adfcc681df7a59cb4cb7ac966d9eac11daa38ebdbc0a6582a210ed4ee95a8d101c4abc925e942ab47535d64f9a5b3b68035c2ea1e900d709a1e8ea938718f532f9805a190446b92bac3040126225ae9d8374bc2008f106979d631734c7453f78c70091f4783b288869cb3c1941a784cd9baad823be27333833dc1f488a45b85952be75cf0a64965662302e3915378dcd5cfcd3ec903d804a29dff2fdf19df5deba4534b09e4dea6e44f152e339b3c43be98ddadfc56533192e216a3d673f00b4aa9cc9e7870acd8b6adb7e0feb77f2292fc2dede94819def3eb1e785541a06ab31ccf725f"

putty-hosts.reg gist

Tim Abell
la source
2
Voir aussi les questions et réponses précédentes sur cet aspect de plink: serverfault.com/questions/420526/…
Josip Rodin
2
FATAL ERROR: Disconnected: No supported authentication methods available (server sent: publickey)
Azimuth
Dans le cas où votre télécommande fonctionne sur un port autre que 22, vous devez exécuter plink avec le port en lui passant un -P <port>argument.
PitaJ
20

J'ai réussi à le faire fonctionner en exécutant plink directement, après l'exécution de pageant, utilisez la commande plink directement - plink.exe -agent -v [email protected]puis après que cela fonctionne sans se bloquer.

benjaminRRR
la source
3
Belle solution! Cela aurait dû être marqué comme une réponse
ZenithS
C'est la meilleure réponse.
Brian Lacy
5

Pour contourner ce problème, j'ai configuré GitBash pour utiliser plink avec -batch option. L'option désactive toutes les invites - le plink se terminera sans se bloquer et n'ajoutera aucune empreinte digitale clé au cache.

Pour ajouter un -batchparamètre à la commande plink exécutée par GitBash, vous pouvez définir une option git config:

git config --global core.sshCommand "plink -batch"

Ou définir GIT_SSH_COMMAND la variable d'environnement.

La sortie lorsque vous clonez un dépôt à partir d'un hôte inconnu sera similaire à ceci:

The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40
Connection abandoned.
fatal: Could not read from remote repository.

Après ce message, vous pouvez ajouter une clé au cache avec la commande:

echo y | plink [email protected]

REMARQUE : veuillez vérifier si plink est dans votre PATH. Vous pouvez également utiliser un chemin de type UNIX dans l'option de configuration GitBash, par exemple:

/c/Program\ Files/PuTTY/plink.exe -batch
frenchu
la source
1
Salut je reçois ce message: ERREUR FATALE: Déconnecté: aucune méthode d'authentification prise en charge disponible (serveur envoyé: publickey)
pungggi
4

Même après avoir effectué la solution de contournement mentionnée dans d'autres réponses, vous pouvez rencontrer une erreur telle que:

ERREUR FATALE: déconnecté: aucune méthode d'authentification prise en charge disponible (serveur envoyé: publickey)

Pour résoudre les deux problèmes à la fois, changez git bash pour utiliser SSH au lieu de PuTTY en ajoutant ce qui suit à votre ~/.profilefichier ( C:\Users\<Username>\.profile). Si vous ne possédez pas déjà ce fichier, créez un nouveau fichier avec cette ligne.

GIT_SSH="/usr/bin/ssh.exe"

Ensuite, ouvrez une nouvelle fenêtre git bash et essayez votre git cloneou à git pullnouveau.

Notez que cela peut vous obliger à créer une clé SSH si vous n'en avez pas déjà une. Pour ce faire, suivez les instructions sur le site Bitbucket .

Voir cette question SO pour des informations connexes.

Schparky
la source
1

Dans votre shell git bash, vérifiez l'existence de GIT_SSH:
echo $GIT<tab><tab>
s'il existe et est défini sur putty, exécutez:
unset GIT_SSH
vous voudrez probablement le mettre dans l'un des scripts de démarrage de git bash.
Ce n'est PAS une solution universelle. Cela a fonctionné dans notre cas particulier.

Richard Jessop
la source
quel / où est un 'script de démarrage git bash'? Je ne connais que le vrai Linux.
Jeff K
Il existe plusieurs scripts de démarrage. Certains se trouvent dans le répertoire / etc; d'autres peuvent être dans votre répertoire personnel. Les scripts de démarrage exécutés dépendent des options de ligne de commande de votre shell (interactif vs login). Celles-ci sont pertinentes quel que soit le système d'exploitation sur lequel le shell fonctionne.
Richard Jessop
Windows n'a pas de répertoire «/ etc».
Jeff K
Les shells Bash qui fonctionnent sous Windows le font. Ils sont généralement mappés vers un emplacement en dehors du répertoire de base (ou d'installation) du shell. Jetez un oeil à git bash et Cygwin bash. Rappelez-vous, ce sont des shells qui ressemblent et fonctionnent beaucoup comme un shell sur un système Linux.
Richard Jessop
0

Cela semble un peu idiot, mais après avoir essayé tout ce qui précède, j'ai décidé de réinstaller Git Bash avec les options par défaut et cela a fonctionné.

Vlad
la source