Mensagem de erro do GitHub - permissão negada (chave pública)


701

Alguém viu esse erro e sabe o que fazer?

Estou usando o terminal, estou na raiz, o repositório GitHub existe e não sei o que fazer agora.

> git push -u origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.



1
Pode haver problemas de permissão com as chaves .ssh e authoirzed. Ssh é bastante rigoroso, pesquise no google.
Karl Morrison


como a resposta do @bdukes 'aqui está o comando usando https e ele funcionará, exemplo do Windows: "PS C: \ xampp \ htdocs> git clone github.com/algolia/instant-search-demo.git "
Dung

Respostas:


663

O GitHub não pode autenticar você. Portanto, você não está configurado com uma chave SSH, porque não configurou uma na sua máquina ou sua chave não está associada à sua conta do GitHub.

Você também pode usar o URL HTTPS em vez do URL SSH / git para evitar ter que lidar com chaves SSH. Este é o método recomendado pelo GitHub .

Além disso, o GitHub possui uma página de ajuda específica para essa mensagem de erro e explica com mais detalhes tudo o que você pode verificar.


53
Este erro não é exclusivo do GitHub. Estou recebendo o mesmo erro com BitBucket, e eu estou coçar a cabeça sobre como resolvê-lo ...
IgorGanapolsky

32
A parte de ajuda está sendo usada ssh -vT git@github.comna página de ajuda do Github para ajudar a depurar qual chave seu repositório está usando. Sugiro que você o adicione na sua resposta.
MaximeBernard

25
O voto positivo do uso de HTTPS em vez de SSL é um pouco decepcionante. SSH é muito mais conveniente. A sugestão do @MaximeBernard acima resolveu o problema para mim: o GIT não estava procurando o lugar certo para o diretório .ssh. Usar ssh -vT git@github.comfornece muitas informações sobre o motivo de não estar funcionando.
Christophe

1
de acordo com meu comentário acima, uma terceira opção é que o comando esteja sendo enviado de uma conta diferente daquela com as teclas ssh (por exemplo, executando como root).
David LeBauer

1
Como o @ theapache64 mencionou: Se você está em um Mac e já gerou uma chave ssh, "ssh-add" pode realmente ser o que está faltando. Trabalhou para mim.
Digital Impermanence

78

Você criou um arquivo de configuração no diretório ~ / .ssh? Deveria ter conteúdos como estes:

Host github.com 
 IdentityFile ~/.ssh/github_rsa

Supondo que você tenha criado uma chave ssh chamada github_rsa

e carregou no GitHub ...

NOTA: Você deve seguir este modo de configuração explícita se tiver mais de 1 chave (2 e mais) no diretório ~ / .ssh /. Se você não especificar a chave dessa maneira, a primeira chave em ordem será usada e usada para autenticação do github; portanto, depende do nome do arquivo da chave.


1
Eu havia gerado a chave ssh e fui capaz de funcionar bem, por algum tempo, sem problemas. Um belo dia (provavelmente após a reinicialização), parou de funcionar, enquanto a chave estava intacta no github e no meu sistema local. Eu adicionei o "arquivo de configuração", especificando a chave mapeada para o domínio. Detalhes fornecidos acima na resposta igor-ganapolsky. Funciona bem !
parasrish

3
Isso realmente resolve meu problema! Muito Obrigado! Mas eu tenho uma pergunta. Antes de usar seu método, ssh -T git@github.comresponda corretamente, enquanto git push -u origin masterdá o mesmo erro que na pergunta. Por que posso conectar-me a ele corretamente, mas não consigo pressioná-lo ou buscá-lo?
Eden Mais difícil

@EdenHarder Estou enfrentando o mesmo problema. Você encontrou uma resposta para isso?
Vreddhi Bhat 25/07/19

64

Eu sei sobre esse problema. Depois de adicionar a chave ssh, adicione sua chave ssh ao agente ssh (nos documentos oficiais )

ssh-agent -s
ssh-add ~/.ssh/id_rsa

Depois que tudo funciona bem, o git pode visualizar a chave adequada, antes não podia.


5
Prefeito! Trabalhei no meu MacOS X.
stillatmylinux 6/09/15

9
Não foi possível abrir uma conexão com seu agente de autenticação.
Mona Jalal

tentar executar este: evalssh-agent -s
Vincent Acent

@MonaJalal usessh-add ~/.ssh/github_rsa
Anirban Nag 'tintinmj'

Perfeito. está funcionando. Obrigado. Er
Erkam KUCET

62

Você precisa gerar uma chave SSH (se não tiver uma) e associar a chave pública à sua conta do Github. Veja a documentação do Github .


2
Obrigado por isso ... Eu tenho uma chave SSH agora gerada no GitHub. Que comando é usado para associar os dois no terminal agora? Obrigado!
Webwrks 17/10/12

2
Não há comando de terminal para isso. Consulte a etapa 4 da documentação que vinculei na minha resposta.
Cdhowie 17/10/12

Eu clonei o repositório usando HTTPS. Preciso gerar a chave SSH neste caso?
Pabitra Dash

@PabitraDash No. HTTPS não usa chaves SSH.
Cdhowie 24/05

51

Isso aconteceu comigo. Por alguma razão, minha origem ficou confusa sem que eu percebesse:

Verifique se suas configurações ainda estão corretas

git remote -v

o URL precisa ser algo como ssh: //git@github.com/YourDirectory/YourProject.git; se você não vir git@github.com, use

git remote set-url origin git://github.com/YourDirectory/YourProject.git

para acertar. Ou você pode usar o aplicativo github para verificar e definir o URL do Repositório Remoto Principal no painel de configurações do seu repositório específico.


9
Tenha cuidado com os URLs. Eles diferem entre https e ssh e as postagens nesta página não deixam isso claro. Cada projeto git possui um arquivo .git / config no diretório raiz do projeto. Lá você pode definir as informações do controle remoto e da ramificação. Configurando o controle remoto para https: url = github.com/<yourGitUserName>/<yourGitProject>.git Enquanto para git + ssh: url = git@github.com: <yourGitUserName> / <yourGitProject> .git Ter o URL errado causa o erro erro de permissão de chave pública negado, o que provavelmente não é um erro muito claro.
darKoram

para o meu caso na final apenas trabalha com na parte: git origem remota set-url github.com/your_directory/your_project.git
rld

19

Supondo que você esteja conectando o GitHub por SSH, você pode executar o comando abaixo para confirmar isso.

$git config --get remote.origin.url

Se você obtiver um resultado com o seguinte formato git@github.com: xxx / xxx.github.com.git, faça o seguinte.

Gere uma chave SSH (ou use uma existente). se você tiver uma, basta adicionar sua chave ao ssh-agent (etapa 2) e à sua conta do GitHub (etapa 3).

abaixo são para quem não tem chave SSH.

Etapa 1 Gerando par de chaves rsa pública / privada.

$ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Você será solicitado a confirmar onde salvar a chave SSH e qual a senha que deseja usar.

Etapa 2 Adicione sua chave ao ssh-agent

  • Verifique se o ssh-agent está ativado

    $eval "$(ssh-agent -s)"

  • Adicione sua chave SSH ao ssh-agent:

    $ssh-add ~/.ssh/id_rsa

Etapa 3 Adicione sua chave SSH à sua conta

$sudo apt-get install xclip

$xclip -sel clip < ~/.ssh/id_rsa.pub

Em seguida, adicione a chave copiada ao GitHub

Vá para Configurações -> Chaves SSH (barra lateral Configurações pessoais) -> Adicionar chave SSH -> Preencha o formulário (a chave está na sua área de transferência, basta usar ctrl + v) -> Adicionar chave

Depois de seguir as etapas acima, você deve resolver o problema de permissão.

Link de referência: Gerando chaves SSH .


Esta solução funcionou no ubuntu, $ ssh-add /root/.ssh/id_rsa
Feras

Isso também resolveu uma bagunça estranha no meu ambiente, uma modificação que eu sugeriria é evitar a dependência do xclip, basta usarcat ~/.ssh/id_rsa.pub
Pogrindis

19

Primeiro, precisamos verificar as chaves ssh existentes no seu computador. Abra o Terminal e execute:

ls -al ~/.ssh

#or

cd ~/.ssh
ls

e isso listará os arquivos no diretório .ssh

E, finalmente, dependendo do que você vê (no meu caso):

 github_rsa  github_rsa.pub known_hosts

Apenas tente configurar seu RSA e espero que isso resolva os problemas de "git push origin"

$ ssh-keygen -lf ~/.ssh/github_rsa.pub

NOTA: Os certificados RSA são emparelhados com chaves, portanto, você terá um certificado público e um privado, o privado não estará acessível para você, pois pertence ao github (neste caso), mas é o público que pode estar faltando quando esse erro ocorre (pelo menos esse foi o meu caso, minha conta ou repositório no Github ficou confusa de alguma forma e tive que "vincular" a chave pública, gerada anteriormente)


Preciso copiar a SHAsaída para o github deste comando?
IgorGanapolsky

Não, basta executar "ssh-keygen -lf ~ / .ssh / <YOUR_GITHUB_RSA_FILE.pub>"
d1jhoni1b 4/16

é por isso que também anexei um comando que "lista os arquivos no diretório .ssh" ... para que você saiba de qual arquivo extrair sua chave (ssh-keygen). Lembre-se de que os certificados RSA são emparelhados com chaves; portanto, você terá um certificado público e um privado, o privado não estará acessível para você, pois pertence ao github (nesse caso), mas é o público que você pode estar perdendo quando esse erro ocorre ( pelo menos esse foi o meu caso, minha conta ou
repositório no Github

$ ssh-keygen -lf ~ / .ssh / github_rsa.pub /home/mona/.ssh/github_rsa.pub: Não existe esse arquivo ou diretório
Mona Jalal

"Esse arquivo ou diretório não existe" significa que você não tem esse nome ou caminho de arquivo ... o que você obtém quando executa ls -al ~ / .ssh?
d1jhoni1b

14

Eu estava recebendo esse erro. Acontece que eu havia acabado de atualizar o OSX para o Sierra e minha chave antiga não estava mais registrada.

No começo, eu pensei que era "Atualizar para o macOS Sierra quebrará suas chaves SSH e bloqueará você de seus próprios servidores"

Mas eu tinha evitado esse. Acontece que eu apenas tive que registrar novamente minha chave existente:

ssh-add -K

E digite a senha ... pronto!


2
mesmo problema, trabalhou para mim: `ssh-add K ~ / .ssh / id_rsa`
mvladk

11

Outra solução:

crie as chaves SSH, digite ssh-keygen -t rsa -C "your_email@example.com". Isso criará os arquivos id_rsa e id_rsa.pub.

Adicione o id_rsa à lista ssh no computador local: ssh-add ~/.ssh/id_rsa.

Depois de gerar as chaves, obtenha a pubkey usando:

cat ~/.ssh/id_rsa.pub 

você receberá algo como:

cat ~/.ssh/id_rsa.pub 

ssh-rsa AAAB3NzaC1yc2EAAAADAQABAAACAQCvMzmFEUPvaA1AFEBH6zGIF3N6pVE2SJv9V1MHgEwk4C7xovdk7Lr4LDoqEcqxgeJftwWQWWVrWWf7q9qCdHTAanH2Q5vx5nZjLB+B7saksehVOPWDR/MOSpVcr5bwIjf8dc8u5S8h24uBlguGkX+4lFJ+zwhiuwJlhykMvs5py1gD2hy+hvOs1Y17JPWhVVesGV3tlmtbfVolEiv9KShgkk3Hq56fyl+QmPzX1jya4TIC3k55FTzwRWBd+IpblbrGlrIBS6hvpHQpgUs47nSHLEHTn0Xmn6Q== user@email.com

copie essa chave (valor) e vá para github.com e, na configuração (chave ssh e pgp), adicione sua chave pública.


10

Caso você não esteja acessando seu próprio repositório ou clonando dentro de um repositório clonado (usando alguns comandos "git submodule ..."):

No diretório inicial do seu repositório:

$ ls -a

1. Abra ".gitmodules" e você encontrará algo parecido com isto:

[submodule "XXX"]
    path = XXX
    url = git@github.com:YYY/XXX.git

Altere a última linha para ser o HTTPS do repositório que você precisa extrair:

[submodule "XXX"]
    path = XXX
    https://github.com/YYY/XXX.git

Salve ".gitmodules" e execute o comando para submódulos, e ".git" será atualizado.

2. Abra ".git", vá para o arquivo "config" e você encontrará algo parecido com isto:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/YYY/XXX.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[submodule "XXX"]
    url = git@github.com:YYY/XXX.git

Altere a última linha para ser o HTTPS do repositório que você precisa extrair:

    url = https://github.com/YYY/XXX.git

Portanto, neste caso, o principal problema é simplesmente com o URL. O HTTPS de qualquer repositório pode ser encontrado agora na parte superior da página do repositório.


9

isso funcionou para mim:

1- remova todas as origens

git remote rm origin  

(veja https://www.kernel.org/pub/software/scm/git/docs/git-remote.html )

* remote: "Gerencie o conjunto de repositórios (" controles remotos ") cujas ramificações você rastreia.

* rm: "Remova o controle remoto chamado. Todas as ramificações de rastreamento remoto e as definições de configuração do controle remoto foram removidas."

2- verifique se tudo foi removido:

git remote -v  

3- adicionar novo mestre de origem

git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git

isso é tudo, pessoal!


1
Isso foi helpful.By estes comandos que começa a me perguntar o nome de usuário github e senha da conta, depois que eu posso facilmente empurrar a ligação github por tipo de terminal: git push-u mestre origem
Noha Salah

8

Certificar-se de que ssh-add -l mostra uma impressão digital de uma chave SSH presente na lista de chaves SSH da sua conta do Github.

Se a saída estiver vazia, mas você sabe que possui uma chave SSH privada que funciona com sua conta do github, execute ssh-addessa chave (encontrada em ~/.ssh. É nomeada id_rsapor padrão, portanto, você provavelmente executará ssh-add id_rsa).

Senão, siga estas instruções para gerar um par de chaves SSH.


8

Eu estava usando o github anteriormente para um dos meus projetos php. Ao usar o github, eu estava usando ssh em vez de https. Eu tinha minha máquina configurada assim e toda vez que eu costumava confirmar e enviar o código, ela me perguntava minha senha de chave rsa.

Depois de alguns dias, parei de trabalhar no projeto php e esqueci minha senha rsa. Recentemente, comecei a trabalhar em um projeto java e mudei para o bitbucket. Como esqueci a senha e não há como recuperá-la , decidi usar o protocolo https (recomendado) para o novo projeto e obtive o mesmo erro solicitado na pergunta.

Como eu resolvi isso?

  1. Executei este comando para dizer ao meu git para usar https em vez de ssh:

    git config --global url."https://".insteadOf git://
    
  2. Remova qualquer controle remoto, se houver

    git remote rm origin
    
  3. Refaça tudo, desde o git init ao git push e funciona!

PS: Também desinstalei o ssh da minha máquina durante o processo de depuração, pensando que, removê-lo, resolverá o problema. Sim eu conheço!! :)


Não acho uma boa ideia apontar as pessoas para https, quando o ssh também deve funcionar. Além disso, é improvável que isso funcione para pessoas por trás de um proxy corporativo.
Igor Stoppa 25/10

8

Problema resolvido se você alterar o acesso ssh para acesso https ao repositório remoto:

git remote set-url origin https_link_to_repository

git push -u origin master

5

Acho que tenho a melhor resposta para você, seus aplicativos git leem seu id_rsa.pub no diretório raiz do usuário

/home/root/.ssh/id_rsa.pub

É por isso que sua chave em /home/seu_username/.ssh/id_rsa.pub não pode ser lida pelo git. Então, você precisa criar a chave em /home/root/.ssh/

$ sudo su
$ ssh-keygen
$ cd ~/.ssh
$ cat id_rsa.pub

Em seguida, copie a chave na sua conta do github. Funcionou para mim. Você pode experimentá-lo.


Isso me permitiu a resposta que eu estava procurando. Eu executei o clone com sudo por hábito, então ele estava procurando as credenciais erradas. Tirei o sudo e meu clone correu bem.
Taekahn

4

Se você já criou uma chave SSH e ainda está recebendo o erro, é porque precisa conceder ao usuário permissões para ler e gravar na pasta na qual está clonando. Para fazer isso sudo chmod 777 <your_folder_name_here>". Obviamente, isso ocorre depois que você gerou uma chave SSH e ainda está recebendo esse erro. Espero que isso ajude futuros usuários.

Editar

Para adicionar isso, use admin no Windows se você estiver usando o git bash


Este. Isso também pode causar o problema.
KevinO

1
Esse era o meu problema, mas eu não recomendaria definir permissões 777 em uma pasta. No meu caso, a pasta era de propriedade do usuário root e eu precisava dar acesso a minha conta de usuário não root. Eu fiz assim:sudo chown -R $USER:$USER <your_folder_name_here>
David

@ David, eu também recomendo isso também. 777 é bastante hacky e não seguro.
Kevin

3

Eu tive o mesmo problema recentemente. Isso pode ajudar se você precisar de uma correção imediatamente, mas isso deve ser feito sempre que você reiniciar o sistema

Do terminal, execute: ssh-add ~/.ssh/id_rsa

Digite a senha do sistema e isso deve funcionar.


3

Gostaria de adicionar algumas das minhas descobertas:

Se você estiver usando GitBash, verifique se a chave SSH está armazenada em~/.ssh/id_rsa .

Por padrão, GitBashprocura ~/.ssh/id_rsacomo caminho padrão a chave SSH.

Até o nome do arquivo é id_rsaimportante. Se você salvar sua chave SSH em outro nome de arquivo ou caminho, ele emitirá o Permission Denied(publickey)erro.


3

OK, existem poucas soluções para essa, algumas delas já podem ter sido mencionadas, mas apenas para mantê-las juntas:

  • verifique se as chaves estão presentes, por padrão outra pasta ~ / .ssh /, ou seja, id.rsa e id.rsa.pub

  • verifique se as chaves possuem permissões corretas, você pode executar o chmod:

    chmod 600 ~ / .ssh / id_rsa

    chmod 644 ~ / .ssh / id_rsa.pub

  • verifique se o conteúdo da sua chave pública (id_rsa.pub) corresponde ao carregado na configuração do repositório remoto

  • Finalmente, corrija os problemas com o agente ssh : ssh-add

Mais informações: https://itcodehub.blogspot.com/2015/01/ssh-add-problems-with-ssh-agent-and.html


Eu havia copiado minha chave ssh de um computador para outro usando uma unidade USB formatada como FAT32. Isso mudou as permissões dos arquivos. No Ubuntu, estou acostumado a ser solicitado automaticamente a senha SSH quando necessário, mas isso silenciosamente não aconteceu até eu correr chmodcomo você descreveu. Obrigado.
lydell

1

Se você estiver usando a interface do usuário do GitHub for Mac, verifique as preferências para verificar se está logado.


1

Eu estava recebendo o mesmo erro durante o 'git push'. No lado do cliente, eu tinha duas origens e mestre. Eu removi um, então funcionou bem.


1

você pode usar o URL Https para fazer login

Eu acho que você está tentando fazer login com o ssh url quando diz git push, se pedir apenas a senha, considere que você está se conectando através do ssh.better, use o http url.


1

Também no ubuntu, apesar de já haver uma chave SSH inserida nas configurações do BitBucket, eu tenho esse problema. O motivo foi que eu estava tentando o seguinte:

sudo git push origin master

Não sei por que, mas foi resolvido usando

git push origin master

Nenhum sudo usado.


1

Para mim, eu tentei isso -

eval "$(ssh-agent -s)"

então eu corro

ssh-add ~/.ssh/path-to-the-keyfile

e para gerar a chave você pode executar

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

isso irá gerar o par de chaves (pública e privada).

você pode armazenar essa chave no github para mais informações. Leia Adicionando uma nova chave SSH à sua conta do GitHub

Espero que ajude os outros :)


1

Eu estava tendo um problema semelhante ao @Batman. No entanto, como eu estava executando isso em / usr / local / src / projectname, executar sem o sudo não era uma opção.

Basta adicionar o sinalizador -E para preservar o ambiente (seu ~ / .ssh / path).

$ sudo -E git clone git@your_repo

Do man sudo:

-E, --preserve-env Indica a política de segurança que o usuário deseja preservar suas variáveis ​​de ambiente existentes. A política de segurança pode retornar um erro se o usuário não tiver permissão para preservar o meio ambiente.


1

Um cenário em que isso acontecerá é quando você seguir as instruções do GitHub depois de criar seu repositório. O Git instruirá você a adicionar seu controle remoto com algo assim.

git remote add origin git@github.com:<user>/<project>.git

Substitua o que está em <> pelos valores relacionados à sua conta.

A solução é remover o .gitsufixo. Adicione o controle remoto da seguinte maneira:

git remote add origin git@github.com:<user>/<project>


1

tl; dr

em ~/.ssh/configcolocar

PubkeyAcceptedKeyTypes=+ssh-dss

Cenário Se você estiver usando uma versão do openSSH> 7, como digamos no MacBook Pro da barra de toque, éssh -V
OpenSSH_7.4p1, LibreSSL 2.5.0

Você também tinha um Mac antigo que originalmente tinha sua chave que você colocou no Github, é possível que esteja usando uma chave id_dsa. O OpenSSH v7 não substitui por padrão o uso dessas chaves DSA (que incluem isso ssh-dss), mas você ainda pode adicioná-lo novamente colocando o código a seguir em seu~/.ssh/config

PubkeyAcceptedKeyTypes=+ssh-dss

A fonte que funcionou para mim é esta newsletter do Gentoo

Agora você pode pelo menos usar o GitHub e depois consertar suas chaves no RSA.


1

Encontrei esta página ao procurar uma solução para uma mensagem de erro semelhante usando git pullum host remoto:

$ git pull
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Eu estava conectado da minha máquina local ao host remoto via ssh -AY remote_hostname. Esta não é uma solução para a pergunta do OP, mas útil para outras pessoas que se deparam com esta página, portanto, poste-a aqui.

Observe que, no meu caso, git pullfunciona bem na minha máquina local (ou seja, a chave ssh foi configurada e adicionada à conta do GitHub, etc.). Resolvi meu problema adicionando isso ao ~/.ssh/configmeu laptop:

Host *
     ForwardAgent yes

Em seguida, reconectei-o ao host remoto ssh -AY remote_hostnamee git pullagora trabalhei. A alteração na configuração permite encaminhar meu par de chaves ssh da minha máquina local para qualquer host. A -Aopção de sshrealmente encaminhar nessa sessão ssh. Veja mais detalhes aqui.


0

Talvez o seu agente ssh não esteja ativado Você pode tentar

  1. Baixar git

http://git-scm.com/

  1. Instale-o

  2. Ativar ssh-agent

C: \ Arquivos de programas \ Git \ cmd

start-ssh-agent


0

Vá para o painel da sua conta do GitHub, encontre o repositório do projeto, clique na guia Configurações - em Implantar chaves, você precisará adicionar sua chave SSH. Abra o Terminal e digite:

cat ~/.ssh/id_rsa.pub | pbcopy 

Isso copiará a chave do seu arquivo id_rsa.pub. Então, basta voltar ao painel do GitHub, colá-lo, clicar em Adicionar chave e pronto.

A mesma solução se aplica às contas Bitbucket.

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.