O famoso “ERROR: Permission to .git denied to user” do Git


118

Tentei pesquisar no Google e li https://help.github.com/en/articles/connecting-to-github-with-ssh e vários, vários guias. Não consigo git push -u origin masterou git push origin master(o mesmo comando).

Eu tenho minha conta git há pelo menos 2 ou mais anos. Tenho conseguido criar repositórios e push -u origin mastermuito bem no meu laptop, mas estou tendo problemas neste desktop.

Aqui está o que eu tentei:

1. Eu configurei meu nome de usuário git

2. Eu configurei meu e-mail de usuário git

3. Fiz upload do conteúdo de meu /home/meder/.ssh/id_rsa.pub para a página da conta do github. Eu verifiquei que não colei nenhum espaço em branco

4. Eu criei um ~ / .ssh / config com estes conteúdos:

  Host github.com
  User git
  Hostname github.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_rsa

Eu modifiquei o .ssh para 700, id_rsa 600

5. Eu adicionei a origem remota adequada sem cometer erros de digitação :git remote add origin git@github.com:medero/cho.git

6. Para confirmar o nº 5, aqui está meu .git / config. O diretório está correto e não outro diretório:

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = git@github.com:medero/cho.git

7. ssh git@github.com -v me dá uma autenticação bem-sucedida

8. Uma coisa estranha é que o nome de usuário com o qual ele me saúda foi tanexado a ele. Meu nome de usuário do github é medero, não medert.

Oi mederot! Você foi autenticado com sucesso, mas o GitHub não fornece acesso ao shell.

9. Estou não atrás de um proxy ou firewall

10. A chave é oferecida, aqui está a saída de -v:

debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /home/meder/.ssh/known_hosts:58
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /home/meder/.ssh/id_rsa
debug1: Remote: Forced command: gerve mederot
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Server accepts key: { some stuff, dont know if i should share it

debug1: Remote: Forced command: gerve mederot
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Authentication succeeded (publickey).

11. Aqui estão os comandos que usei

mkdir cho
git init
touch README
git add README
git commit -m 'test'
git remote add origin git@github.com:medero/cho.git
git push -u origin master

12. Não quero criar uma nova chave SSH.

13. Se eu clone usando ssh e faço uma edição, um commit e um git push, obtenho exatamente a mesma coisa.

14. Aqui está o erro real:

$ git push
ERROR: Permission to medero/cho.git denied to mederot.
fatal: The remote end hung up unexpectedly

15. Configurei meu nome de usuário e token github:

$ git config --global github.user medero $ git config --global github.token 0123456789yourf0123456789tokenDefine o token GitHub para todas as instâncias git no sistema

16. Confirmei que meu nome de usuário do github NÃO é mederote meu token do github ESTÁ CORRETO de acordo com a página da minha conta (validado nos primeiros 2 caracteres e nos últimos 2 caracteres).

17. Para confirmar # 16, ~ / .gitconfig contém

[github]
    token = mytoken...
    user = medero

18. Eu fiz ssh-key add ~/.ssh/id_rsase for necessário ...



TEORIAS:

Eu suspeito que há algo estranho porque quando eu obtenho a autenticação do ssh, a saudação do usuário é mederote não medero, que é minha conta. Será que algo em minha conta do github pode estar incorretamente armazenado em cache?

Eu também suspeito de alguma estranheza de cache ssh local porque se eu mv ~/.ssh/id_rsa KAKAe mv ~/.ssh/id_rsa.pub POOPOO, e fizer ssh git@github.com -v, ele ainda me autentica e diz que atende meu /home/meder/.ssh/id_rsa quando eu renomei-o ?! Tem que ser cacheado ?!


Estou usando o "Github para Windows" e tive um problema semelhante ao alternar entre duas contas do Github. Aqui está minha solução: stackoverflow.com/questions/18565876/…
Alisa

Se você deseja enviar de 2 repositórios locais diferentes para o
repositório

Respostas:


35

Na etapa 18, suponho que você quer dizer ssh-add ~/.ssh/id_rsa? Se sim, isso explica o seguinte:

Eu também suspeito de alguma estranheza de cache de ssh local porque se eu mv ~ / .ssh / id_rsa KAKA e mv ~ / .ssh / id_rsa.pub POOPOO, e faço ssh git@github.com -v, ele ainda me autentica e diz que serve meu /home/meder/.ssh/id_rsa quando mudei o nome ?! Tem que ser cacheado ?!

... já que ssh-agentestá armazenando sua chave em cache.

Se você olhar no GitHub, verá que existe uma conta mederot . Tem certeza de que isso não tem nada a ver com você? O GitHub não deve permitir que a mesma chave pública SSH seja adicionada a duas contas, pois quando você está usando os git@github.com:...URLs ele está identificando o usuário com base na chave SSH. (Que isso não deveria ser confirmado aqui .)

Então, eu suspeito (em ordem decrescente de probabilidade) que um dos seguintes é o caso:

  1. Você criou a conta mederot anteriormente e adicionou sua chave SSH a ela.
  2. Outra pessoa obteve uma cópia da sua chave pública e a adicionou à conta do mederot GitHub.
  3. Há um bug horrível no GitHub.

Se 1 não for o caso, eu relataria isso ao GitHub, para que eles pudessem verificar cerca de 2 ou 3.

Mais :

ssh-add -l verifique se há mais de uma identificação existente se sim, remova-o por ssh-add -d "aquele arquivo de chave"


Grande ajuda, Mark! Isso consertou para mim também.
Leachy Peachy

Era isso. Você me salvou de uma grande dor de cabeça. Agora só preciso lembrar de executar ssh-add ...toda vez que quiser trocar meus logins do github / ssh.
Cerin

Por algum motivo ssh-add -d <keyfile>, não funciona. (Excluindo manualmente os arquivos.) O cache que você mencionou deve ser recarregado manualmente de alguma forma. Quão?
not2qubit

ssh-add -d-> "Não foi possível abrir uma conexão com o seu agente de autenticação."
alex

O ssh-addfoi o pouco que fez isso para mim. Obrigado!
rayryeng,

159

Depois de pesquisar no Google por alguns dias, descobri que esta é a única pergunta semelhante à minha situação.

Porém, acabei de resolver o problema! Portanto, estou colocando minha resposta aqui para ajudar qualquer pessoa que esteja procurando por esse problema.

Aqui está o que eu fiz:

  1. Abra "Keychain Access.app" (você pode encontrá-lo no Spotlight ou LaunchPad)

  2. Selecione "Todos os itens" na categoria

  3. Pesquisar "git"

  4. Exclua todos os itens antigos e estranhos

  5. Tente empurrar novamente e funcionou


17
Perfeito amigo. Você é um herói.
Prince Bansal

1
Claro que sim, finalmente, depois de lutar com incontáveis ​​chaves SSH, esta é a resposta que funcionou! Parece que o acesso Mac e https usa o Keychain. Louco.
Patrick Chu

1
ABENÇOAMOS VOCÊ ESTOU TENTANDO RESOLVER ISSO DURANTE SEMANAS
Jon Hendershot

1
Parece muito útil, mas não está claro o que é old & strange. Estou prestes a bagunçar um monte de coisas ..?
geotheory

1
@geotheory As old & strangecoisas significam os itens com datas antigas e e-mail ou nome de usuário incorretos. Você pode classificar a tabela por Date Modified.
Alice Chan

91

Se o problema estiver surgindo no Windows, remova as credenciais do histórico do Windows.

  • Vá para o Gerenciador de credenciais
  • Vá para as credenciais do Windows
  • Exclua as entradas em Credenciais genéricas
  • Tente conectar-se novamente. Desta vez, ele deve solicitar o nome de usuário e a senha corretos.

insira a descrição da imagem aqui insira a descrição da imagem aqui

remover credenciais do git


2
Perfeito. Estava obtendo 403 acessando com uma conta que não uso mais. Agora resolvido.
Anton Epikhin de

1
apenas excluir as credenciais do github.com foi suficiente para mim
Bart De Boeck,

E aí você pode mudar seu nome de usuário e qualquer coisa. Esse é o caminho.
WesternGun

Na verdade, isso funcionou para mim também, mas o que eu faria se eu tivesse 2 contas diferentes?
an4s911

22

No Mac, se você tiver vários logins GitHub e não estiver usando SSH, force o login correto usando:

git remote set-url origin https://username@github.com/username/repo-name.git

Isso também funciona se você estiver tendo problemas para enviar para um repositório privado.


1
Obrigado, isso funcionou para mim. Ele me solicitou a senha e consegui empurrar depois de fornecer minha senha. Muito apreciado!
pixel

... mas isso não resolveu o problema para mim no Windows, apenas no Mac
pixel

... mas a sugestão de @Fahid acima para limpar as credenciais no Windows ajudou
pixel

Você é um herói.
Vaibhav

Esta é a resposta correta se vários projetos do github pertencerem a contas diferentes
Gangadhar JANNU

14

É devido a um conflito.

Limpe todas as chaves do ssh-agent

ssh-add -d ~/.ssh/id_rsa
ssh-add -d ~/.ssh/github

Adicione a chave ssh do github

ssh-add   ~/.ssh/github

Deve funcionar agora.


3
também ssh-add -Dremove todas as identidades, pode ser útil se o agente entrar em um estado inválido.
Sam

6

Estou usando o Mac e o problema é resolvido excluindo o registro github do aplicativo de acesso às chaves: Aqui está o que eu fiz:

  1. Abra "Keychain Access.app" (você pode encontrá-lo no Spotlight ou noLaunchPad)
  2. Selecione "Todos os itens" na categoria
  3. Pesquisar "git"
  4. Exclua todos os itens antigos e estranhos Tente empurrar novamente e funcionou

As etapas acima foram copiadas de @spyar para facilitar.


6

Acho que a solução é a mesma que @spyar fornece, que é o Keychain Access aplicativo armazenado com o nome de usuário antigo.

Existem 2 soluções para esta situação:

  1. Exclua as informações no Keychain Access por
    • Abra o aplicativo Keychain Access
    • Pesquisar github
    • Excluir credenciais correspondentes

Ou

  1. Se você quiser usar a chave ssh . Você acabou de alterar o url do Repo de https

https://github.com/username/repo.git

para dentro

git@github.com: username / repo.git

Espero que isto ajude.


2

Recentemente, encontrei esse problema em um repositório antigo em minha máquina que foi enviado por push usando https. as etapas 5 e 6 resolveram meu problema redefinindo o url remoto para meu repo usando o url https para o url ssh

verificar se o remoto está usando o url https

> git remote -v
origin  https://github.com/ExampleUser/ExampleRepo.git (fetch)
origin  https://github.com/ExampleUser/ExampleRepo.git (push)

em seguida, reconfigurando a origem para usar o url ssh

> git remote set-url origin git@github.com:ExampleUser/ExampleRepo.git

verificando novo controle remoto

> git remote -v
origin  git@github.com:ExampleUser/ExampleRepo.git (fetch)
origin  git@github.com:ExampleUser/ExampleRepo.git (push)

poderia agora com sucesso git push -u origin

Ainda não tenho certeza de qual configuração eu teria alterado que poderia ter causado a falha do push quando o remoto é https, mas essa foi a solução para o meu problema


ERRO: Permissão para unrealcv / synth-computer-vision.git negada para monajalal. fatal: não foi possível ler do repositório remoto. Certifique-se de que possui os direitos de acesso corretos e de que o repositório existe.
Mona Jalal

1

Eu tive o mesmo problema que você. Depois de muito tempo pesquisando no Google, descobri que meu erro foi causado por vários usuários que adicionaram a mesma chave em suas contas.

Então, aqui está minha solução: deletar a chave ssh do usuário errado (posso fazer isso porque o usuário errado também é minha conta). Se o usuário errado não for sua conta, você pode precisar alterar sua chave ssh, mas eu não acho que isso vá acontecer.

E acho que seu problema pode ser causado por um erro de digitação no nome de suas contas.


0

Este problema também é causado por:

Se você estiver em um mac / linux, e estiver usando 'ControlMaster' em seu ~ / .ssh / config, pode haver alguns processos mestre de controle ssh em execução.

Para encontrá-los, execute:

ps aux | grep '\[mux\]'

E mate os relevantes.


0

Eu também me deparei com isso, o que causou isso para mim é que ao clonar o repositório para o qual estava enviando minhas alterações, peguei o URL clone de uma guia anônima sem fazer login. (Ainda não tenho ideia de como isso afeta). Isso por algum motivo levou o git a escolher outra conta de usuário. Quando tentei novamente em uma página de login adequada, funcionou normalmente para mim.


0

Encontrei este erro ao usar o Travis CI para implantar conteúdo , que envolvia enviar edições para um repositório.

Acabei resolvendo o problema atualizando o token de acesso pessoal GitHub associado à conta Travis com a public_repopermissão de acesso ao escopo:

Selecione <code> public_repo </code>

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.