github: nenhum método de autenticação compatível disponível

98

Eu uso o github e adicionei e sincronizei arquivos com sucesso no meu laptop no passado.

Recentemente, comecei a receber " Erro fatal PuTTY: desconectado: nenhum método de autenticação compatível disponível " após a execução:

git pull origin master (ou push)

Contudo

ssh [email protected] retorna a resposta correta: ERROR: Hi username! Você foi autenticado com sucesso, mas o GitHub não fornece acesso ao shell. Conexão com github.com fechada.

depois de vasculhar o github, encontrei este morcel:

Nenhum método de autenticação suportado disponível. Você deve estar ciente da variável de ambiente GIT_SSH, que é usada pelo git para encontrar seu cliente de idioma ssh, se o ssh não funcionar para você. A instalação do git pode estar usando plink.exe (via GIT_SSH) para realizar a autenticação. Em caso afirmativo, certifique-se de ter o pageant.exe em execução e a chave que você criou para o github carregada nele. Isso fornece a chave para plink.exe; sem ele, o erro acima ocorrerá.

não tenho certeza do que é plink.exe ou peagant.exe .. e o fato de ssh [email protected] parecer autenticar corretamente me faz pensar qual é a melhor solução aqui .. eu certamente não quero complicar minha configuração se não necessário.

Sonic Soul
fonte

Respostas:

101

Você pode criar um arquivo chamado ".profile" em seu diretório inicial, para mim, C: \ Usuários \ [usuário]

Dentro desse arquivo, coloque a seguinte linha de código:

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

Isso definirá a variável de ambiente GIT_SSH para usar o cliente ssh incluído com o git.

O script .profile é executado quando você inicia a linha de comando do Git Bash.

Edit: Este é o meu .profile. Ele pedirá sua senha na primeira vez que você iniciar o prompt de comando do git, e se lembrará dela a partir de então, até que você reinicie o computador. Muito útil para que você não precise digitar sua senha toda vez que quiser fazer algo.

SSH_ENV="$HOME/.ssh/environment"
GIT_SSH="/usr/bin/ssh.exe"

function start_agent {
echo "Initializing new 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;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
#ps ${SSH_AGENT_PID} doesn't work under cygwin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
Rex Morgan
fonte
8
+1 Eu não tive nada além de problemas ao usar o Putty / Pageant para as necessidades de ssh do git. Usar o cliente ssh integrado faz maravilhas. Isso explica por que ssh [email protected] retorna bem se você executá-lo sozinho, mas deixar o git usar as ferramentas configuradas (Putty / Pageant) não.
enriquein de
14
Para mim, é apenas GIT_SSH = "/ bin / ssh.exe" (no Windows). Obrigado!
Martin Konicek
1
@ Justin você está usando o prompt mingw32?
Rex Morgan
2
Usando o cygwin no Windows 7, a resposta acima funcionou, mas eu precisava GIT_SSHfazer .bash_profilee não.profile
Gabe
2
No meu caso, com Windows 10 usando Git Bash, éGIT_SSH="D:\Program Files\Git\usr\bin\ssh.exe"
PaulH
31

Usando TortoiseGit

TortoiseGit> Configurações ... Rede ... Cliente SSH: C:\Program Files\Git\usr\bin\ssh.exe

A localização pode variar. Em um computador estava emC:\Program Files (x86)\Git\bin\ssh.exe

tartaruga

Joseph Dykstra
fonte
5
obrigado. isso funcionou. nota: você pode ter que procurar exatamente onde 'ssh.exe' está em uma determinada máquina. para mim, era C: \ Arquivos de programas \ Git \ usr \ bin \ ssh.exe (provavelmente em uma máquina desatualizada)
pestófago
10

"... não tenho certeza do que é plink.exe ou peagant.exe ..."

Já que você perguntou: plink & pageant fazem parte do pacote PuTTY, que é uma implementação de SSH que oferece suporte a Linux e Windows e é completamente dominante no Windows.

SSH

Secure Shell (SSH) é um protocolo de rede criptográfico para proteger a comunicação de dados. Ele estabelece um canal seguro em uma rede insegura em uma arquitetura cliente-servidor, conectando um aplicativo cliente SSH a um servidor SSH. Os aplicativos comuns incluem login de linha de comando remoto, execução de comando remoto, mas qualquer serviço de rede pode ser protegido com SSH.

se você já usou o Telnet, é assim (mas mais seguro): ele permite que você acesse remotamente o shell bash (linha de comando) de um host Linux.

PuTTY

PuTTY é um emulador de terminal gratuito e de código aberto, console serial e aplicativo de transferência de arquivos de rede. Suporta vários protocolos de rede, incluindo SCP, SSH, Telnet, rlogin ...

No Windows, é o software dominante para acessar remotamente a linha de comando de um host Linux sob o protocolo SSH (acima). No Windows, as extensões .exe são para executáveis. Portanto, essas notas sobre plink.exe e pageant.exe provavelmente não se aplicam se você estiver no Linux . PuTTY inclui

Plink : uma interface de linha de comando para back-ends do PuTTY

Pageant : um agente de autenticação SSH para PuTTY, PSCP e Plink

De ( http://en.wikipedia.org/wiki/Secure_Shell#Key_management )

Quando a chave pública está presente na extremidade remota e a chave privada correspondente está presente na extremidade local, a digitação da senha não é mais necessária ... para segurança adicional, a própria chave privada pode ser bloqueada com uma frase secreta.

Portanto, o github está hospedado em uma máquina Linux e usa SSH para proteger a conexão. SSH ou autentica com senhas ou chaves, muitos hosts (github?) Autenticam apenas com chaves. Sua configuração está aparentemente tentando autenticar com uma chave. Chaves e hosts não são um por um: você pode ter duas chaves para o mesmo host e / ou dois hosts para a mesma chave, portanto, eles precisam ser gerenciados. Se você estiver no Windows, sua sessão SSH provavelmente será acessada através do plink e suas chaves provavelmente serão gerenciadas pelo Pageant.

Importe a chave necessária sempre que carregar o Pageant. Se você seguiu os guias que dizem "importe sua chave" e viu que funcionou, mas não funciona agora, consulte o Capítulo 9: Usando o Pageant para autenticação .

Uma última dica se você estiver no Windows: você pode ter várias instâncias do pacote PuTTY instaladas por várias ferramentas. O TortoiseGit, por exemplo, instala o seu próprio.

Woodvi
fonte
8

Eu experimentei esse problema porque meu GIT_SSHapontava para a versão do TortoiseSVN do Plink.exe. Eu mudei para apontar para a versão do TortoiseGit, reiniciei o cmd e funcionou.

Não me lembro exatamente, mas a versão do TortoiseSVN pode ter sido a versão de 32 bits, e a versão do TortoiseGit era de 64 bits (localizado em Program Files, não Program Files (x86)).

Verifique GIT_SSHnovamente seu env var.

Eu prefiro usar o git com o normal cmd.exe(no Console2, é claro)

Vaughan
fonte
Você se lembra corretamente; Eu tive o mesmo problema, com GIT_SSH apontando para a versão TortoiseSVN de 32 bits do TortoisePlink.exe. Movê-lo para a versão do TortoiseGit funcionou.
idiota
6

Para usuários do TortoiseGit no Windows

Originalmente, eu costumava configurar a maioria dos meus repositórios Github / Bitbucket usando os URLs do repositório SSH, pois (originalmente) costumava ser a única maneira conveniente de evitar que o TortoiseGit solicitasse sua senha em cada ação.

Mas configurar TortoiseGit dessa maneira sempre foi dolorosamente doloroso. Sempre levava horas para configurar corretamente, pois as opções de instalação padrão nunca pareciam funcionar (mesmo em 2016, caramba!).

Mas TortoiseGit agora tem melhor gerenciamento de senha para HTTPS, e o Github realmente recomenda usar URLs HTTPS sempre que possível.

URL SSH: [email protected]:User/repo-name.git

URL HTTPS: https://github.com/User/repo-name.git

Os benefícios do HTTPS são:

  • Sem gerenciamento ou geração de chaves SSH
  • Não há necessidade de estar em pageant.exeexecução constante (o que solicita sua senha em cada lançamento)
  • Usando TortoiseGit da Austrália, descobri que clones sobre HTTPS são 5-10 vezes mais rápidos do que SSH
Simon East
fonte
+ 'git config --global http.sslVerify false'
Mike
5

Se você estiver usando o Pageant e estiver obtendo o erro descrito na pergunta após reiniciar o PC (ou fechar e reabrir o Pageant):

O erro pode ser causado pelo fato de o Pageant não ter a chave SSH do GitHub carregada ativamente. Por padrão, o Pageant NÃO carrega automaticamente as chaves da sessão anterior quando é iniciado.

Para carregar a chave:

  1. Open Pageant. (No Windows, se o Pageant estiver em execução, terá um ícone na bandeja do sistema. Clique duas vezes nele.)
  2. Clique no botão Adicionar chave e prossiga para adicionar sua chave SSH GitHub existente.

Para evitar esse problema no futuro, você pode configurar o Pageant para carregar automaticamente sua chave ao iniciar. (O Pageant solicitará automaticamente uma senha se sua chave estiver protegida por senha.)

Etapas para fazer isso (supondo que você já tenha o Pageant configurado para ser executado quando o Windows iniciar):

  1. Encontre o atalho usado pelo Windows para executar o Pageant quando o Windows é iniciado. (Pode estar na pasta de inicialização, que pode ser aberta em Iniciar> Executar> shell:startup)
  2. Na caixa de diálogo Propriedades do atalho, anexe o caminho completo e o nome do arquivo do arquivo de chave SSH ao campo "Destino".

Referência e detalhes completos: http://blog.shvetsov.com/2010/03/making-pageant-automatically-load-keys.html

Jon Schneider
fonte
4

Meu problema era que eu estava tentando usar meu nome de usuário do github. Aparentemente, ao usar o Github (ou é uma coisa do Git?) , Se você usar a autenticação baseada em chave, será necessário definir seu nome de usuário como git.

Não tenho certeza de por que você precisa de um nome de usuário - talvez alguém com mais conhecimento possa explicar isso.

BlueRaja - Danny Pflughoeft
fonte
Ao clonar um repositório privado, seria uma URL como [email protected]: username / Repository.git. Também não tenho certeza da ciência por trás disso, mas parece que git é um nome de usuário genérico para todas as contas do Github
Inverno,
1
PLink / Pageant funciona bem. Este é o problema real, e usar algo assim ssh://[email protected]/myname/repo.gitfuncionará muito bem. Bom trabalho. Quanto ao motivo, presumo que seja para bloquear a segurança. O usuário 'git' tem seu login desabilitado, então ninguém pode invadir o sistema dessa forma. Eles precisam ter uma chave válida até mesmo para falar com o Github e, uma vez que tenham uma chave válida, eles podem
compará-
2

Na minha máquina com Windows 7 executando o Github para Windows usando git versão 1.8.3.msysgit.0. Descobri que atualizar minha variável de ambiente do sistema GIT_SSH para C: \ Arquivos de programas (x86) \ Git \ bin \ ssh.exe parecia funcionar. Isso também corrigiu meu problema de contato com o repositório git do OpenShift.

atorres757
fonte
2

Funcionou para mim no Windows 8: a variável GIT_SSH estava apontando para plink.exe, mudou nas configurações do sistema para apontar para o binário ssh, e isso corrigiu o problema. Para descobrir o caminho completo para o ssh, execute:

where ssh
Dmitriy
fonte
2

Para resolver esse problema, foi o que fiz.

Eu estava usando Git Bash no Windows 10

Comecei o Pageant, pressionei a tecla Adicionar,

insira a descrição da imagem aqui

naveguei até a pasta C: \ Usuários \ nome_de_usuário \ .ssh e escolhi minha chave

insira a descrição da imagem aqui

Em seguida, tentei fazer um push git e funcionou desta vez.

Lismore
fonte
Lembre-se, você provavelmente terá que fazer isso toda vez que reiniciar seu PC com Windows - você pode colocar o Pageant em sua pasta de inicialização como um atalho com o argumento de linha de comando correto para seu arquivo de chave privada, mas se você definir uma senha em seu Ao criá-la, você precisará se lembrar de clicar com o botão direito do mouse no ícone Pageant na bandeja de ferramentas, selecionar "Adicionar chave" e preenchê-la após cada reinicialização.
webbje
1

Eu encontrei o mesmo problema, porém a solução GIT_SSH pareceu funcionar uma vez para mim. Depois de reiniciar o computador, percebi que era outra coisa, pois consegui clonar meus repositórios privados sem nenhum problema usando Git Bash ou Prompt de comando, mas não no Sublime Text 3 com o plugin SublimeGit. Minha solução era simples e é realmente o que @BlueRaja - Danny Pflughoeft mencionou, mas achei que poderia usar alguma direção;)

Basicamente, você só precisa editar ~/.ssh/confige garantir que o nome de usuário seja git. Você também pode dizer a ele para usar uma chave SSH específica para o Github - Meu ~/.ssh/configarquivo se parece com o seguinte:

Host gh
    Hostname github.com
    User git
    IdentityFile ~/.ssh/github_rsa.pub

Eu tenho uma chave específica para o Github devido à quantidade de outras coisas que faço ao longo do meu dia, mas se você tiver apenas uma, geralmente será ~/.ssh/id_rsa.pubcomo o Github explica aqui .

Sei que todo mundo tem uma solução diferente, mas deixarei isso aqui para qualquer pessoa que possa encontrar este artigo sem uma correção. Boa sorte!

Inverno
fonte
1

Recebi este erro ao usar o TortoiseGit para clonar um repositório do GitHub. Corrigido clicando em "Load Putty Key" e selecionando um arquivo de chave (* .pkk) na caixa de diálogo de clone Git.

Zymotik
fonte
0

Eu tenho esse problema (ssh direto funcionou, mas git pull falhou) devido ao meu remoto git não ser o que eu pensava.

Sim, sim, sei que é um erro estúpido, mas acontece e vale a pena verificar.

Usar git remote -v

cowlinator
fonte
0

Tive um problema semelhante depois de atualizar GitExtensions para a versão 3.3.0.7719

De alguma forma, ele reverteu minhas configurações de autenticação para usar PuTTY em vez de OpenSSH.

Nessa versão, aqui está o menu que usei para habilitar o OpenSSH novamente:

insira a descrição da imagem aqui

limpar
fonte