Como resolver o erro Permissão negada (chave pública) ao usar o Git?

632

Estou no Mac Snow Leopard e acabei de instalar git.

Eu apenas tentei

git clone [email protected]:cakebook.git

mas isso me dá esse erro:

Initialized empty Git repository in `/Users/username/Documents/cakebook/.git/`
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

o que estou perdendo?
Eu também tentei fazer ssh-keygensem senha, mas ainda o mesmo erro.

teepusink
fonte
8
você tentou fazer upload da chave pública que você gerou via ssh-keygen?
Patrick Cornelissen
Meu problema foi que tentei clonar sudo- esse é outro usuário com outra chave pública.
Vitaly Zdanevich
mesmo erro. Eu criei anteriormente uma chave pública através do github e, em seguida, gerei outro par de chaves com o ssh-keygenutilitário. A exclusão da chave pública antiga nas configurações pessoais no github e a adição da chave id_rsa.pub gerada pelo ssh às chaves SSH e GPG corrigiram os problemas de permissão de clonagem.
Tanner Dolby

Respostas:

774

Se o usuário não gerou um par de chaves pública / privada ssh definido antes

Esta informação está funcionando no theChaw, mas pode ser aplicada a todos os outros repositórios git que suportam autenticações SSH pubkey. (Veja gitolite , gitlab ou github, por exemplo.)

Primeiro comece configurando seu próprio conjunto de pares de chaves públicas / privadas. Isso pode usar o DSA ou o RSA, portanto, basicamente, qualquer chave configurada funcionará. Na maioria dos sistemas, você pode usar o ssh-keygen.

  • Primeiro, você desejará colocar o CD no diretório .ssh. Abra o terminal e execute:

    cd ~/.ssh && ssh-keygen

  • Em seguida, você precisa copiar isso para a área de transferência.
    • No OS X, execute: cat id_rsa.pub | pbcopy
    • No Linux, execute: cat id_rsa.pub | xclip
    • No Windows (via Cygwin / Git Bash), execute: cat id_rsa.pub | clip
  • Adicione sua chave à sua conta através do site.
  • Por fim, configure seu .gitconfig.
    • git config --global user.name "bob"
    • git config --global user.email bob@... (não se esqueça de reiniciar sua linha de comando para garantir que a configuração seja recarregada)

É isso que você deve fazer para clonar e fazer o checkout.

Mais informações podem ser encontradas em https://help.github.com/articles/generating-ssh-keys (graças a @Lee Whitney) -

Se o usuário gerou um par de chaves pública / privada ssh definido antes

  • verifique qual chave foi autorizada nas configurações da sua conta do github ou gitlab
  • determinar qual chave privada correspondente deve ser associada do seu computador local

eval $(ssh-agent -s)

  • definir onde as chaves estão localizadas

ssh-add ~/.ssh/id_rsa

Rufinus
fonte
6
Está bem. Na verdade, isso não é um git, mas um problema de sincronização ssh. Eu tenho o mesmo com o Assembla e você link me ajudou a resolvê-lo. Obrigado !
Alexandre Bourlier
Essa resposta é útil, mas isso parece mais completa e tão fácil se você estiver gerando chaves a partir do zero: help.github.com/articles/generating-ssh-keys
whitneyland
6
Eu tive um problema com o keygen. É sensível ao endereço de email em uma variável de ambiente global. No caso você está tendo esse problema, você vai querer especificar o endereço de e-mail para a sua conta github na primeira etapa: ssh-keygen -t rsa -C "[email protected]"
melchoir55
30
Se isso ainda não funcionar, você precisará ssh-add ~/.ssh/id_rsa.
Michael Litvin
1
Copiar utilizando xclipno Linux só trabalhou fazendo o seguinte xclip -sel clip < ~/.ssh/id_rsa.pubque está listado aqui: help.github.com/articles/generating-ssh-keys
Pat Migliaccio
217

Solução de problemas mais extensa e até correção automática podem ser feitas com:

ssh -vT [email protected]

Fonte: https://help.github.com/articles/error-permission-denied-publickey/

stevek
fonte
1
Meu problema tinha a ver com uma chave diferente para o meu servidor. Depois de usar o comando acima para determinar o problema, corrigi o IdentifyFile no meu arquivo de configuração e ele funcionou.
Jarie Bolander 23/09/15
1
Mostrou qual chave o github estava tentando usar para autenticar. v útil
cdosborn
9
Isso não corrige nada. Ainda recebo o erro na pergunta do OP.
IgorGanapolsky
5
O comando está lá para ajudá-lo a solucionar o problema, não é uma opção mágica de corrigir isso por mim.
Stevek
2
Não posso dizer que isso tenha resolvido nada, mas é um comando interessante e funciona com o GitHub Enterprise também.
Hack-R
164

Este erro pode ocorrer quando você está acessando o URL SSH (leitura / gravação) em vez do URL somente leitura do Git, mas você não tem acesso de gravação a esse repositório.

Às vezes, você apenas deseja clonar seu próprio repositório, por exemplo, implantar em um servidor. Nesse caso, você realmente só precisa de acesso READ-ONLY. Mas como esse é seu próprio repositório, o GitHub pode exibir o URL SSH se essa for sua preferência. Nessa situação, se a chave pública do host remoto não estiver nas chaves SSH do GitHub, seu acesso será negado, o que é esperado que aconteça .

Um caso equivalente é quando você tenta clonar o repositório de outra pessoa para o qual você não tem acesso de gravação com o URL SSH.

Em uma palavra, se sua intenção é clonar apenas um repositório, use URL HTTPS ( https://github.com/{user_name}/{project_name}.git) em vez de URL SSH ( [email protected]:{user_name}/{project_name}.git), o que evita a validação de chave pública (desnecessária).


Atualização: o GitHub está exibindo HTTPS como o protocolo padrão agora e essa mudança provavelmente pode reduzir o possível uso indevido de URLs SSH.

kavinyao
fonte
Com o https://github.comgit url, ele ainda diz SSL certificate problem: self signed certificate in certificate chain. git -c http.sslVerify=false clone ...parece uma jogada perigosa. O Chrome não fornece nenhum aviso de SSL. Pensamentos?
precisa
1
@ uosɐſ Desculpe, mas nunca encontrei esse problema. Talvez a primeira coisa a fazer é tentar o mesmo comando de uma máquina diferente e ver se o problema persiste.
kavinyao
1
Isso fez isso por mim também. Obrigado. Para clonar meu repositório git na minha conta de hospedagem compartilhada (1 e 1), tive que usar. git clone https://github.com/MyUserName/MyRepo.git Basta clicar nos links de texto abaixo do URL do repositório, à direita da página do Github, onde diz " Você pode clonar com HTTPS, SSH ou Subversion . " (Clique HTTPS para obter o link em vez do padrão SSH .)
Oliver Schafeld
OBRIGADO!!!!!!
Sharl Sherif
Excelente resposta. Finalmente, alguém explica por que funciona assim.
Qback 17/03
104

O link de ajuda do github me ajudou a resolver esse problema. Parece que a chave ssh não foi adicionada ao agente ssh. Isto é o que eu acabei fazendo.

Comando 1:

Verifique se o ssh-agent está ativado. O comando inicia o ssh-agent em segundo plano:

eval "$(ssh-agent -s)"

Comando 2:

Adicione sua chave SSH ao ssh-agent:

ssh-add ~/.ssh/id_rsa
jarora
fonte
7
Após a atualização para OSx El Capitan para Sierra, isso funcionou para mim.
Louwki 21/09/16
7
Trabalhar para mim após a atualização para o macOS Sierra =)
Adriano Resende
Isso funcionou para mim no Raspberry Pi, onde o ssh-add possui uma bandeira "-k" em vez de "-K", aparentemente. Mas depois que adicionei minha chave de implantação, consegui clonar com êxito meu repositório usando o link SSH.
21717 Josh
34

Obteve o mesmo relatório de erro.

Corrigido o uso de HTTP. Desde que eu não quero definir "chaves SSH" para um PC de teste.

Altere o URL para HTTP ao clonar:

git clone https://github.com/USERNAME/REPOSITORY.git

Meu problema é um pouco diferente : tenho um URL definido ao adicionar um repositório local existente ao remoto, usando:

git remote add origin ssh://github.com/USERNAME/REPOSITORY.git

Para corrigi-lo, redefina o URL para HTTP:

git remote set-url origin https://github.com/USERNAME/REPOSITORY.git

BTW, você pode verificar sua URL usando o comando:

git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)

Espero que isso ajude alguém como eu. : D

Robina Li
fonte
22

Isso funciona para mim:

ssh-add ~/.ssh/id_rsa
Wouter Schoofs
fonte
21

Observe que (pelo menos para alguns projetos) você deve ter uma conta no github com uma tecla ssh .

Veja as chaves listadas no seu agente de autenticação ( ssh-add -l )
(se você não vir nenhuma, adicione uma das chaves existentes com ssh-add / path / to / your / key (por exemplo: ssh-add ~ /.ssh/id_rsa ))
(se você não tiver nenhuma chave, primeiro crie uma. Consulte: http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/internet/node31.html ou apenas google ssh-keygen)

Para verificar se você possui uma chave associada à sua conta do github :

Acesse: https://github.com/settings/ssh

Você deve ver pelo menos uma chave com uma chave de hash correspondente a um dos hashes que você viu quando digitou ssh-add -l apenas um minuto atrás.

Caso contrário, adicione um e tente novamente.

Mason Bryant
fonte
Isso funcionou para mim. Aconteceu comigo porque minha chave não foi adicionada ao agente de autenticação. Obrigado.
antonD
19

Eu estava lutando com o mesmo problema que foi o que fiz e fui capaz de clonar o repo. Eu segui estes procedimentos para o iMac .

Primeiro passo: Verificando se já temos a chave SSH pública.

  1. Terminal aberto.
  2. Digite ls -al ~/.sshpara ver se as chaves SSH existentes estão presentes:

Verifique a lista de diretórios para ver se você já possui uma chave SSH pública. O público padrão é um dos seguintes d_dsa.pub, id_ecdsa.pub, id_ed25519.pub, id_rsa.pub

Se você não encontrar, vá para a etapa 2, caso contrário, siga a etapa 3

Etapa 2: Gerando Chave SSH Pública

  1. Terminal aberto.
  2. Digite o comando followong com seu endereço de email válido usado para o github ssh-keygen -t rsa -b 4096 -C "[email protected]"
  3. Você verá os seguintes no terminal Generating public/private rsa key pair. Quando solicitar "Enter a file in which to save the key,"pressionar Enter. Isso aceita o local padrão do arquivo. Quando solicitado, Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]basta pressionar enter novamente. No prompt, digite uma senha segura.
  4. Enter passphrase (empty for no passphrase): [Type a passphrase]pressione Enter se não quiser Enter same passphrase again: [Type passphrase again]pressionar Enter novamente

Isso irá gerar id_rsa.pub

Etapa 3: Adicionando sua chave SSH ao ssh-agent

  1. Tipo intermediário eval "$(ssh-agent -s)"
  2. Adicione sua chave SSH ao ssh-agent. Se você estiver usando uma chave SSH existente em vez de gerar uma nova chave SSH, precisará substituir id_rsa no comando pelo nome do seu arquivo de chave privada existente. Digite este comando$ ssh-add -K ~/.ssh/id_rsa

Agora copie a chave SSH e adicione-a à sua conta do github

  1. No terminal, digite este comando com o seu nome de arquivo ssh. pbcopy < ~/.ssh/id_rsa.pubIsso copiará o arquivo para a sua área de transferência. Agora abra sua conta do github Vá para Configurações> Chaves SSH e GPG> Nova chave SSH Digite o título e cole a chave da área de transferência e salve-a. Voila, você terminou.
Zeeshan Shabbir
fonte
2
Cópia de usuário do Windows via: cat ~ / .ssh / id_rsa.pub | clip
Fabii 23/05
1
Finalmente, depois de ler aqui e ali por uma hora, a solução passo a passo .... funciona muito bem. Recorde adicionar sua senha github como a senha nas etapas de outra forma terá que adicionar manualmente cada vez
Afshin Ghazi
13

Eu tive uma situação ligeiramente diferente, estava conectado a um servidor remoto e estava usando o git no servidor. Quando executei qualquer comando git, recebi a mesma mensagem

   Permission denied (publickey).
   fatal: The remote end hung up unexpectedly

A maneira como eu o corrigi foi alterando o arquivo / etc / ssh_config no meu Mac. de

ForwardAgent no 

para

ForwardAgent yes
Richipal
fonte
O erro estava ocorrendo ao tentar buscar gemas do github a partir de uma VM do VirtualBox. Atualizei meu arquivo Vagrant para uso config.ssh.forward_agent = true, reiniciei a VM e agora funciona.
Chris Bloom
1
Pode não ser a melhor escolha em termos de segurança, de acordo com o seguinte: heipei.github.io/2015/02/26/…
Dad
13

Eu encontrei o mesmo problema porque pensei que a diferença entre SSH e HTTPS é

https://github.com/USERNAME/REPOSITORY.git

ssh://github.com/USERNAME/REPOSITORY.git

Então mudei de HTTPS para SSH apenas mudando https://parassh:// nada no final do URL foi alterado.

Mas a verdade é:

https://github.com/USERNAME/REPOSITORY.git

[email protected]:USERNAME/REPOSITORY.git

O que significa que mudei ssh://github.com/USERNAME/REPOSITORY.gitpara[email protected]:USERNAME/REPOSITORY.git isso funciona.

Erro estúpido, mas a esperança ajuda alguém!

William Hu
fonte
sim, eu mudei ssh://github.com/USERNAME/REPOSITORY.gitpara [email protected]:USERNAME/REPOSITORY.gitele funciona.
William Hu
Certo. Eu só estou dizendo que eu não vejo o ponto de mencionar o https;)
OneCricketeer
Eu vejo porque eu apenas uso em sshvez de httpsentão eu apenas mudei 'https: //' para 'ssh: // `, então eu recebi o erro. Então mude 'ssh: // git /../ `para' git @ .. /":) Editou minha resposta.
William Hu
Funciona para mim. Muito obrigado! Tentei https e, em seguida, ssh, mas ele continua negando meu acesso até chegar ao seu caminho com "git clone [email protected]: /myusername/myproject.git".
Thach Van
6

No Windows, verifique se todos os seus aplicativos estão de acordo com o HOME. Surpreendentemente, o Msys NÃO fará isso por você. Eu tive que definir uma variável de ambiente porque o ssh e o git não conseguiram concordar sobre onde estava o meu diretório .ssh.

Jason
fonte
6

Você está em um ambiente corporativo ? É possível que suas variáveis ​​de sistema tenham sido alteradas recentemente? Por esta resposta do SO, as teclas ssh estão em %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub. Portanto, se %HOMEDRIVE%alterado recentemente, o git não sabe onde procurar sua chave e, portanto, todo o material de autenticação.

Tente correr ssh -vT [email protected]. Anote onde identity fileestá localizado. Para mim, isso estava apontando não para o meu normal, \Users\MyLoginmas para uma unidade de rede, devido a uma alteração nas variáveis ​​de ambiente empurradas no nível da rede.

A solução? Como o meu novo %HOMEDRIVE%possui as mesmas permissões que os meus arquivos locais, mudei para minha pasta .ssh e a encerrei.

Andrew
fonte
este trabalho para mim. ontem minha chave ssh está funcionando, mas hoje algumas configurações do meu sistema são alteradas. Acabei de adicionar a tecla shh novamente e está funcionando agora.
Hitesh Agarwal
6

Gente, é assim que funcionou para mim:

  1. Abra o terminal e vá para o usuário [Ver imagem em anexo]
  2. Abra a pasta .ssh e verifique se ele não possui nenhum arquivo como id_rsa ou id_rsa.pub, caso contrário, às vezes, ele não será reescrito corretamente
  3. git --version [Verifique a instalação e versão do git]
  4. git config --global user.email "seu email id"
  5. git config --global user.name "seu nome"
  6. git config --list [verifique se você definiu seu nome e email]
  7. cd ~ / .ssh
  8. ssh-keygen, solicita salvar arquivos, permite
  9. cat ~ / .ssh / id_rsa.pub [Acesse sua chave pública e copie a chave para as configurações de gerrit]

Nota : Você não deve usar o comando sudo com o Git. Se você tiver uma boa razão para usar o sudo, garanta que o esteja usando com todos os comandos (provavelmente é melhor usar o su para obter um shell como root nesse ponto). Se você gerar chaves SSH sem sudo e tentar usar um comando como sudo git push, não usará as mesmas chaves que gerou

insira a descrição da imagem aqui

insira a descrição da imagem aqui

vikram jeet singh
fonte
5

As instruções básicas do GIT não fizeram referência ao material da chave SSH. Seguindo alguns dos links acima, encontrei uma página de ajuda do git que explica, passo a passo, exatamente como fazer isso em vários sistemas operacionais (o link detectará seu sistema operacional e será redirecionado de acordo):

http://help.github.com/set-up-git-redirect/

Ele percorre tudo o necessário para o GITHub e também fornece explicações detalhadas como "por que adicionar uma senha ao criar uma chave RSA". Pensei em publicá-lo, caso isso ajude alguém ...

gMale
fonte
5

Uma das maneiras mais fáceis

vá para terminal-

  git push <Git Remote path> --all
Vizllx
fonte
3

Se você tiver mais de uma chave, poderá ser necessário ssh-add private-keyfile

kashif
fonte
Muito obrigado! Este foi realmente o meu problema.
GoGreen
[root @ li566-238 hanjiyun] # ssh-add-keyfile privado private-keyfile: Nenhum tal lima ou diretório
JY Han
3

Eu acertei esse erro porque precisava conceder minhas permissões de diretório de trabalho atuais 700:

chmod -R 700 /home/ec2-user/
duhaime
fonte
3

Eu tive que copiar minhas chaves ssh para a pasta raiz. Google Cloud Compute Engine executando o Ubuntu 18.04

sudo cp ~/.ssh/* /root/.ssh/
Kandarp
fonte
2

Acabei de enfrentar esse problema ao definir meu projeto atual e nenhuma das soluções acima funciona. então tentei olhar o que realmente está acontecendo na lista de depuração usando o comando ssh -vT [email protected]. Percebo que meu nome de arquivo de chave privada não está na lista. renomeando o nome do arquivo da chave privada para 'id_rsa' fazer o trabalho. Espero que isso possa ajudar.

Rhey M.
fonte
Não é útil em casos quando você está usando a tecla "id_rsa" para qualquer outra coisa ....
random_user_name
2

É bem direto. Digite o comando abaixo

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Gere a chave SSH. Abra o arquivo e copie o conteúdo. Vá para a página de configuração do GitHub e clique na chave SSH. Clique em Adicionar nova chave SSH e cole o conteúdo aqui. É isso :) Você não deve ver o problema novamente.

karthik339
fonte
1

Eu estava recebendo um erro semelhante de permissão negada (chave pública) ao tentar executar um makefile.

Como alternativa às etapas SSH acima, você pode instalar o aplicativo nativo do GitHub for Mac.

Clique em Baixar GitHub para Mac de - https://help.github.com/articles/set-up-git#platform-mac

Depois de concluir a configuração com sua conta do git hub (eu também instalei as ferramentas de linha de comando do git hub, mas não tenho certeza se essa etapa é necessária ou não), recebi um email -

[GitHub] Uma nova chave pública foi adicionada à sua conta

e meu erro foi corrigido.

WickedW
fonte
1

Eu estava recebendo o mesmo erro. Meu problema foi misturar sudo.

Não consegui criar o diretório no qual estava clonando automaticamente sem prefixar o comando git clone com o sudo. Quando fiz isso, no entanto, minhas chaves ssh não estavam sendo adequadamente referenciadas.

Para corrigi-lo, defino permissões via chmod no diretório pai que desejo conter meu clone para que eu possa escrever nele. Então eu executei o git clone SEM um prefixo sudo. Então funcionou! Alterei as permissões novamente depois disso. Feito.

BuvinJ
fonte
1

Eu estava recebendo esse erro porque gerei as chaves ssh com o email errado. Consegui conectar usando ssh, mas não usando git. A solução foi gerar novamente as chaves usando o endereço de email principal da minha conta do github.

Charles Brunet
fonte
1

Funcionou para mim.

Sua chave pública é salva no arquivo id_rsa.pub; e é a chave que você carrega na sua conta. Você pode salvar essa chave na área de transferência executando o seguinte:

pbcopy <~ / .ssh / id_rsa.pub

  • copie a chave SSH para a área de transferência e retorne ao portal da web.
  • No campo Chave SSH, cole sua chave SSH.
  • No campo Nome, forneça um nome para a chave.
  • Salve  .
Harshikesh Kumar
fonte
1

Funcionou para mim

ssh -i [your id_rsa path] -T [email protected]
Mr 陈哲
fonte
Você prefere explicar por que sua resposta resolveria o problema dele, obrigado.
Muhammed Refaat 06/04/19
1

A solução mais fácil para isso, quando você está tentando enviar para um repositório com um nome de usuário diferente é:

 git remote set-url origin https://[email protected]/USERNAME/PROJECTNAME.git
Nizar B.
fonte
1

Esse erro estranho, no meu caso, foi um sintoma de gnome-keyring-daemonnomear incorretamente a chave para a qual exigia uma senha.

Eu sigo as etapas descritas aqui e digitei a senha pelo terminal. O erro, também conhecido como interface GUI confusa, foi resolvido. Consulte: /ubuntu/3045/how-to-disable-gnome-keyring

rivanov
fonte
1

No meu caso, eu reinstalei o ubuntu e o nome do usuário foi alterado em relação ao anterior. Nesse caso, a chave ssh gerada também difere da anterior.

O problema resolvido basta copiar a chave pública ssh atual, no repositório. A chave estará disponível no seu usuário/home/.ssh/id_rsa.pub

Sonu
fonte
1

No meu MAC, resolvi isso com:

cp ~/.ssh/github_rsa ~/.ssh/id_rsa

Por alguma razão, meu git parou para encontrar a chave privada no github_rsa arquivo. Isso aconteceu em um repositório específico. Quero dizer que em outros repositórios o git continuou funcionando normalmente.

Eu acho que é um bug.

Eu pude encontrar esse comportamento em execução ssh -vT [email protected]

CelinHC
fonte