Git clone / pull congelamento continuo in "Memorizza chiave nella cache?"


160

Sto tentando di clonare un repository dal mio account BitBucket sul mio laptop Windows 10 (con GitBash). Ho completato tutti i passaggi necessari per la connessione (imposta la mia chiave SSH, verificata con successo SSHing git@bitbucket.org, ecc.). Tuttavia, ogni volta che provo a clonare un repository, il prompt si blocca continuamente dopo aver confermato che voglio memorizzare nella cache la chiave di Bitbucket.

User@Laptop MINGW64 /C/Repos
$ git clone git@bitbucket.org: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

Nessun file viene clonato e il risultato è un repository vuoto. Il tentativo di avviare un master origin di git pull da questo repository richiede anche di memorizzare nella cache la chiave, quindi si blocca senza feedback. Nonostante non chieda che la chiave venga memorizzata nella cache quando eseguo un test SSH, le operazioni git chiedono sempre la chiave ogni volta prima di fallire.

Senza messaggi di errore con cui lavorare, sono davvero a corto di ciò che è sbagliato. Ho provato più repository, inclusi quelli molto piccoli, senza successo.

Risposte:


189

Ho avuto questo problema durante la clonazione di un repository anche su Windows 10.

Ci sono riuscito usando la GUI di Putty su SSH sul server in questione (nel tuo caso: bitbucket.org), quindi ho fatto clic su "Sì" quando il prompt chiede se si desidera salvare la chiave del server nella cache. Eseguire di nuovo il comando clone, quindi ha funzionato per me!


21
Questo non lo ha risolto direttamente per me, ma mi ha portato a capire che il problema era legato a GitBash usando Putty per l'autenticazione ssh invece di OpenSSH. Quando ho eliminato la variabile di sistema GIT_SSH e ripristinato GitBash, tutto funziona bene. Grazie!
MarathonStudios,

2
Usando puttyper aggiungere la githubchiave nella cache ha funzionato per me
quercia

4
Questo ha funzionato per me su Win 7 utilizzando la console di comando. Vorrei che qualcuno potesse dirmi perché è successo piuttosto che una soluzione alternativa.
soulsabr,

1
qualcuno può dire come fare sopra la suddetta soluzione
Shreyan Mehta,

2
@Shreyan Mehta ha appena aperto putty, sotto il nome host incolla git@github.com (o qualunque host tu stia utilizzando). Assicurati di selezionare il tipo di connessione di SSH. Il numero di porta dovrebbe essere 22. Assicurati anche di avere la chiave ssh caricata in concorso prima di lanciarlo.
Mr.Invisible,

111
  1. Open Putty
  2. Digita il nome host (come bitbucket.org)
  3. Fai clic su Apri
  4. Fare clic su Sì nel popup per memorizzare nella cache la chiave host
  5. Chiudi Putty

Ho avuto lo stesso problema. Osservando l'output di git, sembra che git non riesca a memorizzare nella cache la chiave host (probabilmente un bug). Quindi devi farlo usando la GUI di PuTTY.
generoso

Ho provato tutti i passaggi, ma quando seleziono 'y' o 'n' niente è soddisfatto, Git Bash non fa nulla
testingh

Hai digitato il nome host corretto nel passaggio 2? Hai provato a riavviare Git Bash?
generoso

1
In che modo differisce dalla risposta accettata?
zb226,

1
Ho votato a favore di questa risposta in quanto fornisce passaggi. Non mi piace come sia una soluzione alternativa (devi ripetere questo per ogni server SSH a cui ti connetti) proprio come la risposta accettata.
ShooShoSha,

26

Per fare ciò da PowerShell aprire una finestra PowerShell e incollare quanto segue:

echo y | & 'C:\Program Files (x86)\GitExtensions\PuTTY\plink.exe' -ssh git@github.com
echo y | & 'C:\Program Files (x86)\GitExtensions\PuTTY\plink.exe' -ssh git@gist.github.com
echo y | & 'C:\Program Files (x86)\GitExtensions\PuTTY\plink.exe' -ssh git@bitbucket.org

o con la versione standalone PuTTY:

echo y | & 'C:\Program Files (x86)\PuTTY\plink.exe' -ssh git@github.com
echo y | & 'C:\Program Files (x86)\PuTTY\plink.exe' -ssh git@gist.github.com
echo y | & 'C:\Program Files (x86)\PuTTY\plink.exe' -ssh git@bitbucket.org

Vale anche la pena sapere che Putty memorizza host noti in una chiave di registro :

HKEY_CURRENT_USER\SoftWare\SimonTatham\PuTTY\SshHostKeys

Per abbreviare quanto sopra è possibile inserire quanto segue in un .regfile ed eseguirlo:

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


2
Vedi anche domande e risposte precedenti su questo aspetto del plink: serverfault.com/questions/420526/…
Josip Rodin

2
FATAL ERROR: Disconnected: No supported authentication methods available (server sent: publickey)
Azimuth,

Nel caso in cui il telecomando funzioni su una porta diversa da 22, è necessario eseguire il plink con la porta passando un -P <port>argomento.
PitaJ,

20

Sono riuscito a farlo funzionare eseguendo direttamente il plink, dopo che lo spettacolo è in esecuzione, usa direttamente il comando plink, plink.exe -agent -v git@github.comquindi dopo che git funziona senza bloccarsi.


3
Bella soluzione! Ciò avrebbe dovuto essere contrassegnato come una risposta
Zenith

Questa è la risposta migliore
Brian Lacy,

5

Per ovviare a questo problema, ho configurato GitBash per utilizzare plink con -batchopzione. L'opzione disabilita tutti i prompt: il plink terminerà senza bloccarsi e non aggiungerà alcuna impronta digitale chiave alla cache.

Per aggiungere un -batchparametro al comando plink eseguito da GitBash è possibile impostare un'opzione di configurazione git:

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

O imposta GIT_SSH_COMMANDla variabile d'ambiente.

L'output durante la clonazione di un repository da host sconosciuto sarà simile al seguente:

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.

Dopo questo messaggio puoi aggiungere una chiave alla cache con il comando:

echo y | plink git@bitbucket.org

NOTA : Controlla se il plink è nel tuo PATH. In alternativa, utilizzare il percorso simile a UNIX nell'opzione di configurazione di GitBash, ad esempio:

/c/Program\ Files/PuTTY/plink.exe -batch

1
Ciao, ricevo questo messaggio: ERRORE FATALE: disconnesso: nessun metodo di autenticazione supportato disponibile (server inviato: chiave pubblica)
pungggi

4

Anche dopo aver eseguito la soluzione alternativa menzionata in altre risposte, potresti riscontrare un errore come:

FATAL ERROR: Disconnected: nessun metodo di autenticazione supportato disponibile (server inviato: publickey)

Per risolvere entrambi i problemi contemporaneamente, cambia git bash per usare SSH invece di PuTTY aggiungendo quanto segue al tuo ~/.profilefile ( C:\Users\<Username>\.profile). Se non si dispone già di questo file, creare un nuovo file con questa riga.

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

Quindi aprire una nuova finestra git bash e tentare la git cloneo il git pullnuovo.

Nota che ciò potrebbe richiedere la creazione di una chiave SSH se non ne hai già una. Per fare ciò, segui le istruzioni sul sito Bitbucket .

Vedi questa domanda SO per informazioni correlate.


1

Nella tua shell git bash, controlla l'esistenza di GIT_SSH:
echo $GIT<tab><tab>
se esiste ed è impostato su putty, esegui:
unset GIT_SSH
Probabilmente vorrai metterlo in uno degli script di avvio di git bash.
Questa NON è una soluzione universale. Ha funzionato nel nostro caso particolare.


cosa / dove è uno 'script di avvio git bash'? Conosco solo Linux reale.
Jeff K,

Esistono più script di avvio. Alcuni si trovano nella directory / etc; altri possono essere nella tua home directory. Gli script di avvio eseguiti dipendono dalle opzioni della riga di comando per la shell (interattivo vs login). Questi sono rilevanti indipendentemente dal sistema operativo su cui viene eseguita la shell.
Richard Jessop,

Windows non ha directory '/ etc'.
Jeff K,

Le shell Bash eseguite su Windows lo fanno. Di solito sono mappati in qualche posto fuori dalla directory base (o installa) della shell. Dai un'occhiata a Git Bash e Cygwin Bash. Ricorda, queste sono shell che sembrano e funzionano molto come una shell su un sistema Linux.
Richard Jessop,

0

Sembra un po 'sciocco, ma dopo aver provato tutto quanto sopra, ho deciso di reinstallare Git Bash con le opzioni predefinite e ha funzionato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.