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 git@thechaw.com: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.


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


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 "your_email@youremail.com"
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 git@github.com

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


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 ( git@github.com:{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.


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

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



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.


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 "your_email@example.com"
  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.

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

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

git@github.com:USERNAME/REPOSITORY.git

O que significa que mudei ssh://github.com/USERNAME/REPOSITORY.gitparagit@github.com:USERNAME/REPOSITORY.git isso funciona.

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


sim, eu mudei ssh://github.com/USERNAME/REPOSITORY.gitpara git@github.com: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 git@github.com: /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.


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 git@github.com. 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.


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


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 ...


5

Uma das maneiras mais fáceis

vá para terminal-

  git push <Git Remote path> --all


3

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


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/

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/

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 git@github.com. 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.


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 "youremailid@yourdomain.com"

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.


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.


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.


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.


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  .


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://USERNAME@github.com/USERNAME/PROJECTNAME.git

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


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


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 git@github.com

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.