Git clone / pull ciągle się zawiesza w „Store key in cache?”


159

Próbuję sklonować repozytorium z mojego konta BitBucket na laptopa z systemem Windows 10 (z GitBash). Ukończyłem wszystkie kroki niezbędne do połączenia (skonfigurowałem mój klucz SSH, zweryfikowałem pomyślnie przez SSHing git@bitbucket.org itp.). Jednak za każdym razem, gdy próbuję sklonować repozytorium, monit nieustannie zawiesza się po potwierdzeniu, że chcę buforować klucz 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

Żadne pliki nie są klonowane, a wynikiem jest puste repozytorium. Próba zainicjowania wzorca pochodzenia git pull z tego repozytorium również prosi o buforowanie klucza, a następnie zawiesza się bez informacji zwrotnej. Mimo że nie pytam o buforowanie klucza podczas testowania SSH, operacje git zawsze pytają o klucz za każdym razem, zanim zakończy się niepowodzeniem.

Bez komunikatów o błędach do pracy, naprawdę nie wiem, co jest nie tak. Próbowałem wielu repozytoriów, w tym bardzo małych, bez żadnego sukcesu.

Odpowiedzi:


188

Miałem ten problem również podczas klonowania repozytorium w systemie Windows 10.

Obejrzałem to, używając GUI Putty do SSH na danym serwerze (w twoim przypadku: bitbucket.org), a następnie kliknąłem „Tak”, gdy pojawi się pytanie, czy chcesz zapisać klucz serwera w pamięci podręcznej. Ponowne uruchomienie polecenia klonowania zadziałało dla mnie!


20
Nie rozwiązało to bezpośrednio problemu, ale uświadomiłem sobie, że problem był związany z GitBash używającym Putty do uwierzytelniania ssh zamiast OpenSSH. Kiedy usunąłem zmienną systemową GIT_SSH i zresetowałem GitBash, wszystko działa dobrze. Dzięki!
MarathonStudios

2
Użycie puttydo dodania githubklucza w pamięci podręcznej zadziałało dla mnie
dąb

4
To działało dla mnie w Win 7 przy użyciu konsoli poleceń. Chciałbym, aby ktoś mógł mi powiedzieć, dlaczego tak się stało, a nie tylko obejście tego problemu.
soulsabr

1
czy ktoś może powiedzieć, jak zrobić powyższe rozwiązanie
Shreyan Mehta

2
@Shreyan Mehta po prostu otwórz putty, pod nazwą hosta wklej git@github.com (lub inny host, którego używasz). Pamiętaj, aby wybrać typ połączenia SSH. Numer portu powinien wynosić 22. Upewnij się również, że klucz ssh został załadowany do programu Pageant przed uruchomieniem tego.
Pan Niewidzialny

110
  1. Open Putty
  2. Wpisz nazwę hosta (np bitbucket.org )
  3. Kliknij Otwórz
  4. Kliknij tak w wyskakującym okienku, aby zapisać klucz hosta w pamięci podręcznej
  5. Zamknij Putty

Miałem ten sam problem. Patrząc na dane wyjściowe z gita, wygląda na to, że git nie może buforować klucza hosta (prawdopodobnie błąd). Więc musisz to zrobić za pomocą PuTTY GUI.
kambunctious

Wypróbowałem wszystkie kroki, ale kiedy wybiorę `` y '' lub `` n '', nic się nie dzieje, Git Bash nic nie robi
testingh

Czy w kroku 2 wpisałeś właściwą nazwę hosta? Czy próbowałeś ponownie uruchomić Git Bash?
kambunctious

1
Czym różni się to od zaakceptowanej odpowiedzi?
zb226

1
Głosowałem w górę na tę odpowiedź, ponieważ zawiera kroki. Nie podoba mi się, jak to jest obejście (musisz to powtórzyć dla każdego serwera SSH, z którym się łączysz), tak jak zaakceptowana odpowiedź.
ShooShoSha

26

Aby to zrobić z programu PowerShell, otwórz okno programu PowerShell i wklej w następujący sposób:

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

lub z samodzielną wersją 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

Warto również wiedzieć, że putty przechowuje znane hosty pod kluczem rejestru :

HKEY_CURRENT_USER\SoftWare\SimonTatham\PuTTY\SshHostKeys

Aby skrócić powyższe, możesz umieścić w .regpliku następujące polecenie i uruchomić go:

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 sedno


2
Zobacz także wcześniejsze pytanie i odpowiedź dotyczące tego aspektu plink: serverfault.com/questions/420526/…
Josip Rodin

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

W przypadku, gdy twój pilot działa na porcie innym niż 22, musisz uruchomić plink z portem, przekazując mu -P <port>argument.
PitaJ,

20

Udało mi się go uruchomić, uruchamiając bezpośrednio plink, po uruchomieniu konkursu użyj bezpośrednio polecenia plink - plink.exe -agent -v git@github.compo tym git działa bez zawieszania się.


3
Niezłe rozwiązanie! To powinno było oznaczać jako odpowiedź
ZenithS

To najlepsza odpowiedź.
Brian Lacy

5

Aby obejść ten problem, skonfigurowałem GitBash do używania plink z -batchopcją. Ta opcja wyłącza wszystkie monity - plink zakończy się bez zawieszania się i nie doda żadnego odcisku palca klucza do pamięci podręcznej.

Aby dodać -batchparametr do polecenia plink wykonywanego przez GitBash, możesz ustawić opcję konfiguracji git:

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

Lub ustaw GIT_SSH_COMMANDzmienną środowiskową.

Dane wyjściowe podczas klonowania repozytorium z nieznanego hosta będą podobne do tego:

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.

Po tej wiadomości możesz dodać klucz do pamięci podręcznej poleceniem:

echo y | plink git@bitbucket.org

UWAGA : Sprawdź, czy plink jest w twoim PATH. Alternatywnie użyj ścieżki podobnej do UNIX w opcji konfiguracyjnej GitBash, np:

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

1
Cześć, otrzymuję tę wiadomość: FATAL ERROR: Disconnected: Brak dostępnych obsługiwanych metod uwierzytelniania (serwer wysłany: publickey)
pungggi

4

Nawet po wykonaniu obejścia wymienionego w innych odpowiedziach możesz napotkać błąd, taki jak:

BŁĄD KRYTYCZNY: Rozłączono: brak dostępnych obsługiwanych metod uwierzytelniania (wysłano serwer: publickey)

Aby rozwiązać oba problemy na raz, zmień git bash, aby używał SSH zamiast PuTTY, dodając następujący fragment do ~/.profilepliku ( C:\Users\<Username>\.profile). Jeśli jeszcze nie masz tego pliku, utwórz nowy plik z tą linią.

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

Następnie otworzyć nowe okno git bash i spróbować git clonelub git pullponownie.

Pamiętaj, że może to wymagać utworzenia klucza SSH, jeśli jeszcze go nie masz. Aby to zrobić, postępuj zgodnie z instrukcjami w witrynie Bitbucket .

Zobacz to pytanie SO, aby uzyskać powiązane informacje.


1

W powłoce git bash sprawdź, czy istnieje GIT_SSH:
echo $GIT<tab><tab>
Jeśli istnieje i jest ustawiony na putty, wykonaj:
unset GIT_SSH
prawdopodobnie będziesz chciał umieścić to w jednym ze skryptów startowych git bash.
To NIE jest rozwiązanie uniwersalne. W naszym przypadku zadziałało.


co / gdzie jest „skrypt startowy git bash”? Znam tylko prawdziwy Linux.
Jeff K

Istnieje wiele skryptów startowych. Niektóre znajdują się w katalogu / etc; inne mogą znajdować się w twoim katalogu domowym. To, które skrypty startowe są wykonywane, zależy od opcji wiersza poleceń w Twojej powłoce (interaktywne czy logowanie). Są one istotne niezależnie od systemu operacyjnego, na którym działa powłoka.
Richard Jessop

Windows nie ma katalogu „/ etc”.
Jeff K

Muszle Bash działające w systemie Windows działają. Zazwyczaj są one mapowane do miejsca poza katalogiem podstawowym powłoki (lub katalogiem instalacyjnym). Spójrz na git bash i Cygwin bash. Pamiętaj, że są to powłoki, które wyglądają i działają bardzo podobnie do powłoki systemu Linux.
Richard Jessop,

0

Brzmi trochę głupio, ale po wypróbowaniu wszystkich powyższych zdecydowałem ponownie zainstalować Git Bash z domyślnymi opcjami i zadziałało.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.