Git clone / pull continuamente congelando em "Store key in cache?"


160

Estou tentando clonar um repositório da minha conta BitBucket para o meu laptop Windows 10 (executando o GitBash). Concluí todas as etapas necessárias para conectar-se (configurei minha chave SSH, verificada com êxito por SSHing git@bitbucket.org, etc.). No entanto, sempre que tento clonar um repositório, o prompt é interrompido continuamente após a confirmação de que eu quero armazenar em cache a chave do 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

Nenhum arquivo é clonado e o resultado é um repositório vazio. Tentar iniciar um mestre de origem git pull a partir deste repositório também pede para armazenar em cache a chave e, em seguida, trava sem feedback. Apesar de não solicitar que a chave seja armazenada em cache durante o teste do SSH, as operações git sempre solicitam a chave todas as vezes antes de falhar.

Sem mensagens de erro para trabalhar, estou realmente sem saber o que está errado. Eu tentei vários repositórios, incluindo muito pequenos, sem nenhum sucesso.

Respostas:


189

Eu tive esse problema ao clonar um repositório no Windows 10 também.

Eu consegui contornar isso usando a GUI do Putty para SSH no servidor em questão (no seu caso: bitbucket.org) e cliquei em 'Sim' quando o prompt pergunta se você deseja salvar a chave do servidor no cache. A execução do comando clone novamente funcionou para mim!


21
Isso não o corrigiu diretamente para mim, mas me levou a perceber que o problema estava relacionado ao GitBash usando o Putty para autenticação ssh em vez do OpenSSH. Quando apaguei a variável de sistema GIT_SSH e redefinii o GitBash, tudo funciona bem. Obrigado!
MarathonStudios

2
Usando puttya adicionar githubchave no cache funcionou para mim
carvalho

4
Isso funcionou para mim no Win 7 usando o console de comando. Eu gostaria que alguém pudesse me dizer por que isso aconteceu, e não apenas uma solução alternativa.
soulsabr 29/02

1
Alguém pode dizer como fazer acima da referida solução
Shreyan Mehta

2
@Shreyan Mehta basta abrir o putty, sob o nome do host, cole git@github.com (ou qualquer host que você esteja usando). Certifique-se de selecionar o tipo de conexão SSH. O número da porta deve ser 22. Certifique-se também de ter a chave ssh carregada no concurso antes de iniciar isso.
23419 Invisible as

111
  1. Open Putty
  2. Digite o nome do host (como bitbucket.org)
  3. Clique em Abrir
  4. Clique em Sim no pop-up para armazenar em cache a chave do host.
  5. Close Putty

Eu tive o mesmo problema. Observando a saída do git, parece que o git está falhando ao armazenar em cache a chave do host (provavelmente um bug). Então você tem que fazer isso usando a GUI PuTTY.
cambunctious

Eu tentei todos os passos, mas quando eu selecionar 'y' ou 'n' nada happeds Git Bash não faz nada
testsingh

Você digitou o nome do host correto na etapa 2? Você tentou reiniciar o Git Bash?
cambunctious

1
Como isso é diferente da resposta aceita?
Zb226

1
Votei esta resposta, pois fornece etapas. Eu não gosto de como é uma solução alternativa (você deve repetir isso para todos os servidores SSH que você se conectar), assim como a resposta aceita.
ShooShoSha

26

Para fazer isso no PowerShell, abra uma janela do PowerShell e cole o seguinte:

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

ou com a versão independente 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

Também vale a pena saber que a massa de vidraceiro armazena hosts conhecidos sob uma chave de registro :

HKEY_CURRENT_USER\SoftWare\SimonTatham\PuTTY\SshHostKeys

Para atalho acima, você pode colocar o seguinte em um .regarquivo e executá-lo:

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
Ver questão também mais cedo e resposta sobre este aspecto da Plink: serverfault.com/questions/420526/...
Josip Rodin

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

No caso em que seu controle remoto opere em uma porta diferente de 22, você precisará executar o plink com a porta passando um -P <port>argumento para ela.
pitaj

20

Eu consegui fazê-lo executando o plink diretamente, depois que o concurso estiver em execução, use o comando plink diretamente - plink.exe -agent -v git@github.comdepois que o git funcionar sem interrupção.


3
Ótima solução! Isso deve ter marcado como resposta #
913 ZenithS

Esta é a melhor resposta.
Brian Lacy

5

Para solucionar esse problema, configurei o GitBash para usar o plink com a -batchopção A opção desativa todos os prompts - o plink terminará sem interrupção e não adicionará nenhuma impressão digital importante ao cache.

Para adicionar -batchparâmetro ao comando plink executado pelo GitBash, você pode definir uma opção de configuração do git:

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

Ou defina GIT_SSH_COMMANDa variável de ambiente.

A saída ao clonar um repositório de host desconhecido será semelhante a esta:

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.

Após esta mensagem, você pode adicionar uma chave ao cache com o comando:

echo y | plink git@bitbucket.org

OBSERVAÇÃO : Verifique se o plink está no seu PATH. Como alternativa, use o caminho semelhante ao UNIX na opção de configuração do GitBash, por exemplo:

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

1
HI eu recebo esta mensagem: ERRO FATAL: Desconectado: Não suportado métodos de autenticação disponíveis (servidor enviou: publickey)
pungggi

4

Mesmo depois de executar a solução alternativa mencionada em outras respostas, você pode encontrar um erro como:

ERRO FATAL: Desconectado: Não há métodos de autenticação suportados disponíveis (servidor enviado: publickey)

Para resolver os dois problemas ao mesmo tempo, altere o git bash para usar o SSH em vez do PuTTY adicionando o seguinte ao seu ~/.profilearquivo ( C:\Users\<Username>\.profile). Se você ainda não possui esse arquivo, crie um novo arquivo com esta linha.

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

Em seguida, abra uma nova janela git bash e tentar a sua git cloneou git pullnovamente.

Observe que isso pode exigir que você crie uma chave SSH se ainda não tiver uma. Para fazer isso, siga as instruções no site Bitbucket .

Veja esta pergunta para obter informações relacionadas.


1

No shell do git bash, verifique a existência de GIT_SSH:
echo $GIT<tab><tab>
Se ele existe e está definido como putty, execute:
unset GIT_SSH
Você provavelmente desejará colocar isso em um dos scripts de inicialização do git bash.
Esta não é uma solução universal. Funcionou no nosso caso particular.


o que / onde é um 'script de inicialização do git bash'? Eu só estou familiarizado com o linux real.
22619 Jeff Jeff K

Existem vários scripts de inicialização. Alguns estão localizados no diretório / etc; outros podem estar no seu diretório pessoal. Quais scripts de inicialização são executados dependem das opções da linha de comando para o seu shell (interativo versus login). Isso é relevante, independentemente do sistema operacional em que o shell é executado.
Richard Jessop

O Windows não possui diretório '/ etc'.
Jeff K

Os shell Bash executados no Windows fazem. Eles geralmente são mapeados para algum lugar fora do diretório base (ou instalação) do shell. Dê uma olhada em git bash e Cygwin bash. Lembre-se, estes são shells que se parecem e operam muito como um shell em um sistema linux.
Richard Jessop

0

Parece um pouco bobo, mas depois de tentar todas as opções acima, decidi reinstalar o Git Bash com as opções padrão e funcionou.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.