Enviar para o Git retornando o Código de Erro 403 fatal: a solicitação HTTP falhou

634

Consegui clonar uma cópia deste repositório através de HTTPS autenticado. Fiz alguns commits e quero voltar ao servidor GitHub. Usando o Cygwin no Windows 7 x64.

C:\cygwin\home\XPherior\Code\lunch_call>git push
Password:
error: The requested URL returned error: 403 while accessing https://MichaelDrog
[email protected]/derekerdmann/lunch_call.git/info/refs

fatal: HTTP request failed

Também configure-o com o modo detalhado. Eu ainda estou bem confusa.

C:\cygwin\home\XPherior\Code\lunch_call>set GIT_CURL_VERBOSE=1

C:\cygwin\home\XPherior\Code\lunch_call>git push
Password:
* Couldn't find host github.com in the _netrc file; using defaults
* About to connect() to github.com port 443 (#0)
*   Trying 207.97.227.239... * 0x23cb740 is at send pipe head!
* Connected to github.com (207.97.227.239) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: C:\Program Files (x86)\Git/bin/curl-ca-bundle.crt
  CApath: none
* SSL connection using AES256-SHA
* Server certificate:
*        subject: 2.5.4.15=Private Organization; 1.3.6.1.4.1.311.60.2.1.3=US; 1.
3.6.1.4.1.311.60.2.1.2=California; serialNumber=C3268102; C=US; ST=California; L
=San Francisco; O=GitHub, Inc.; CN=github.com
*        start date: 2011-05-27 00:00:00 GMT
*        expire date: 2013-07-29 12:00:00 GMT
*        subjectAltName: github.com matched
*        issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert High Ass
urance EV CA-1
*        SSL certificate verify ok.
> GET /derekerdmann/lunch_call.git/info/refs?service=git-receive-pack HTTP/1.1
User-Agent: git/1.7.4.3282.g844cb
Host: github.com
Accept: */*
Pragma: no-cache

< HTTP/1.1 401 Authorization Required
< Server: nginx/1.0.4
< Date: Thu, 15 Sep 2011 22:44:41 GMT
< Content-Type: text/plain
< Connection: keep-alive
< Content-Length: 55
< WWW-Authenticate: Basic realm="GitHub"
<
* Ignoring the response-body
* Expire cleared
* Connection #0 to host github.com left intact
* Issue another request to this URL: 'https://[email protected]/dereker
dmann/lunch_call.git/info/refs?service=git-receive-pack'
* Couldn't find host github.com in the _netrc file; using defaults
* Re-using existing connection! (#0) with host github.com
* Connected to github.com (207.97.227.239) port 443 (#0)
* 0x23cb740 is at send pipe head!
* Server auth using Basic with user 'MichaelDrogalis'
> GET /derekerdmann/lunch_call.git/info/refs?service=git-receive-pack HTTP/1.1
Authorization: Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
User-Agent: git/1.7.4.3282.g844cb
Host: github.com
Accept: */*
Pragma: no-cache

< HTTP/1.1 401 Authorization Required
< Server: nginx/1.0.4
< Date: Thu, 15 Sep 2011 22:44:41 GMT
< Content-Type: text/plain
< Connection: keep-alive
< Content-Length: 55
* Authentication problem. Ignoring this.
< WWW-Authenticate: Basic realm="GitHub"
* The requested URL returned error: 401
* Closing connection #0
* Couldn't find host github.com in the _netrc file; using defaults
* About to connect() to github.com port 443 (#0)
*   Trying 207.97.227.239... * 0x23cb740 is at send pipe head!
* Connected to github.com (207.97.227.239) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: C:\Program Files (x86)\Git/bin/curl-ca-bundle.crt
  CApath: none
* SSL re-using session ID
* SSL connection using AES256-SHA
* old SSL session ID is stale, removing
* Server certificate:
*        subject: 2.5.4.15=Private Organization; 1.3.6.1.4.1.311.60.2.1.3=US; 1.
3.6.1.4.1.311.60.2.1.2=California; serialNumber=C3268102; C=US; ST=California; L
=San Francisco; O=GitHub, Inc.; CN=github.com
*        start date: 2011-05-27 00:00:00 GMT
*        expire date: 2013-07-29 12:00:00 GMT
*        subjectAltName: github.com matched
*        issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert High Ass
urance EV CA-1
*        SSL certificate verify ok.
* Server auth using Basic with user 'MichaelDrogalis'
> GET /derekerdmann/lunch_call.git/info/refs HTTP/1.1
Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
User-Agent: git/1.7.4.3282.g844cb
Host: github.com
Accept: */*
Pragma: no-cache

* The requested URL returned error: 403
* Expire cleared
* Closing connection #0
error: The requested URL returned error: 403 while accessing https://MichaelDrog
[email protected]/derekerdmann/lunch_call.git/info/refs

fatal: HTTP request failed

Estas são as versões do git e curl que tenho:

C:\Users\XPherior>git --version
git version 1.7.4.msysgit.0

C:\Users\XPherior>curl --version
curl 7.21.7 (amd64-pc-win32) libcurl/7.21.7 OpenSSL/0.9.8r zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtsp
smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate Largefile NTLM SSL SSPI libz
Mike
fonte
3
Veja o comentário, que deve ser postado como resposta. Ele funcionou com a 1.7.1, também tinha o problema de solicitação de usuário / senha ausente. Props para stackoverflow.com/a/9575906/805284 ...
sjas
2
verificar o utilizador tem acesso de leitura / escrita para o repositório
Céline Aussourd
22
No futuro, não cole "Authorization: Basic <stuff>" ao mostrar exemplos de cabeçalhos http. É fácil decodificar o base64 e obter sua senha. @ mike: se você não alterou sua senha do github desde que publicou esta pergunta, sugiro que o faça.
FlipMcF
4
@FlipMcF Thanks man. Não sabia. Senha alterada.
Mike
6
@Mike NP. Agora eu começo a promover descaradamente um pequeno blog eu escrevi sobre ele: goo.gl/bpae94
FlipMcF

Respostas:

836

Acabei de ter o mesmo problema e descobri qual é a causa.

O Github parece suportar apenas a maneira ssh de ler e gravar o repositório, embora a maneira https também mostre 'Leitura e gravação'.

Então, você precisa alterar sua configuração de repo no seu PC para ssh way:

  1. editar .git/configarquivo no diretório repo
  2. encontre url=entrada na seção[remote "origin"]
  3. mude de url=https://[email protected]/derekerdmann/lunch_call.gitpara url=ssh://[email protected]/derekerdmann/lunch_call.git. ou seja, altere todos os textos antes do @símbolo parassh://git
  4. Salve o configarquivo e saia. agora você pode usar git push origin masterpara sincronizar seu repositório no GitHub
Xiao
fonte
56
Isso geralmente ocorre quando você clona com o endereço somente leitura do git (que é o padrão quando você não está conectado) em vez do endereço ssh de leitura + gravação.
Nitrodista
43
Meu .git/configera mais parecido url=https://github.com/mynickname/my_repo.gitMas eu também mudei url=ssh://[email protected]/mynickname/my_repo.gite funcionou #
Guillaume Flandre
12
Você pode alterar um URL de repositório com o git remote set-urlcomando Veja minha resposta abaixo.
Fetsh
7
ou simplesmente mudá-lo a partir da linha de comando usandogit remote set-url <name> [email protected]:<username>/<repo>.git
iGbanam
42
Para aqueles que procuram uma solução não ssh, verifique algumas das outras respostas aqui. Adicionar seu nome de usuário ao URL https parece funcionar. (mudança de configuração url para que https: // @ github.com / ... é [email protected] / ... )
Cyrus
431

Para definitivamente poder fazer login usando o httpsprotocolo, você deve primeiro definir sua credencial de autenticação para o URI remoto do git :

git remote set-url origin https://[email protected]/user/repo.git

Em seguida, você será solicitado a fornecer uma senha ao tentar git push.

De fato, isso está no formato de autenticação http. Você também pode definir uma senha:

https://youruser:[email protected]/user/repo.git

Você deve estar ciente de que, se fizer isso, sua senha do github será armazenada em texto sem formatação no diretório .git, o que é obviamente indesejável.

Thiago Macedo
fonte
12
SSH bloqueado no trabalho, então eu tenho que usar HTTPS. Adicionar o nome de usuário corrige meus problemas.
11138 David Poole
32
Essa deve ser a resposta aceita. Não há razão para editar manualmente um arquivo de configuração quando houver uma interface de linha de comando.
21813 Steve Bennett
4
Além disso, para mim, desta maneira ( nome de usuário @ github ... ) solicitou senha e funcionou, enquanto ssh: // git @ github ... falhou ao esperar a autenticação da chave pública.
Steve Bennett
1
funciona e deve ser a resposta aceita! Especialmente em ambientes nos quais o ssh não funciona, este é o caminho a percorrer. Obrigado!
AndreasEK
3
@Achint é um formato de autenticação. Você pode definir sua senha demasiado https://youruser:[email protected]/user/repo.gitapesar não seguro
Thiago Macedo
113

Uma pequena adição à resposta de Sean .

Em vez de editar o .git/configarquivo manualmente, você pode usar o git remote set-urlcomando

No seu caso, deve ser:

git remote set-url origin ssh://[email protected]/derekerdmann/lunch_call.git

Acho mais fácil e limpo do que mexer com arquivos de pontos.

fetsh
fonte
Eu não sei se este é apenas um post antigo e git mudou, mas como hoje para corrigir o problema que eu tive que usar git remote set-url origin ssh://[email protected]:derekerdmann/lunch_call.gitcom dois pontos entre o github.com eo nome repo
KevinL
56

Edite o .git/configarquivo no diretório repo

Localizar url=entrada na seção[remote "origin"]

Altere de url=https://github.com/rootux/ms-Dropdown.gitpara https://[email protected]/rootux/ms-Dropdown.git

onde USERNAMEestá o seu nome de usuário no github

Gal Bracha
fonte
Esta resposta não se aplica ao meu problema. Meu URL .git/configestá definido como ` github.com/myrepo/subproject ' .
kilojoules
Teve este problema com o Android Studio. Funciona bem.
AndroidDev 15/09/16
46

As outras respostas que sugerem a mudança para o SSH meio que perdem o sentido. HTTPS é suportado, mas você deve fazer login com sua senha do GITHUB, não com sua senha SSH (que foi o que estava me dando o mesmo erro exato).

Eu estava tendo o mesmo problema, mas certificar-me de usar minha senha real do GitHub no prompt de senha do terminal corrigiu a solução sem nenhuma alteração na configuração ou recorrendo ao SSH.

O motivo pelo qual é importante observar isso é que muitas instituições públicas (como a minha escola) bloquearão o SSH, mas permitirão o HTTPS (que é o único motivo pelo qual comecei a clonar pelo HTTPS em primeiro lugar).

Espero que ajude qualquer pessoa que tenha o mesmo problema ...

BMB
fonte
1
mas por que? Eu não tinha que fazer isso no passado. Um certificado expirou ou algo assim?
Thufir
Não tenho certeza, eu não sou um especialista, é assim que eu comecei a trabalhar no meu caso :)
BMB
Mesmo @Thufir. Eu não tenho idéia do por que isso de repente funcionou.
26615 Nick Manning
Eu efetuo logon com o meu nome de usuário e senha no navegador. MAS, quando tento, são git pushsolicitados au ep, e o resultado é uma permissão negada .... Você sabe o que estou perdendo?
Omar
26

Mesmo erro e resolução em Mac OS X.

Tudo estava funcionando bem até eu criar uma nova conta no GitHub e tentar empurrar

$ git push -u origin master

E obteve o erro:

remote: permissão para NEWUSER / NEWREPO.git negada para OLDUSER. fatal: não foi possível acessar ' https://github.com/NEWUSER/NEWREPO.git/ ': o URL solicitado retornou o erro: 403

Deveria ter sido corrigido definindo o user.name para repositório global ou atual

$ git config –-global user.name NEWUSER
$ git config user.name NEWUSER

Mas isso não aconteceu.

Corrigi o problema excluindo o OLDUSER associado ao GitHub do aplicativo Keychain Access na seção Senhas. Em seguida, o comando push foi bem-sucedido.

$ git push -u origin master

referência

zeeawan
fonte
Excluindo o OLDUSER do Acesso às Chaves App funcionou para mim
Augusto Triste
1
Eu recebi o mesmo erro, mas por um motivo diferente, mas relacionado, que exigia uma solução diferente. Eu estava tentando ir para um repositório em que não tenho acesso de gravação (não sou colaborador). Isso se deve mais ao meu desconhecimento de como contribuir para um repo que não é meu. Eu pensei que poderia apenas criar uma nova ramificação e, em seguida, fazer uma solicitação de recebimento. Não tão. Preciso dividir o repo primeiro, fazer minhas alterações no garfo e fazer uma solicitação de recebimento do repo bifurcado para o repo original. Provavelmente foi um erro estúpido da minha parte, mas se eu conseguir, então tenho certeza que outros n00bs poderiam. :)
Neo
23

Se você estiver usando o Windows, às vezes isso pode acontecer porque o Windows armazena credenciais para repositório externo (no nosso caso, github) em seu próprio armazenamento. E as credenciais que foram salvas podem ser diferentes daquelas que você precisa no momento.

insira a descrição da imagem aqui

Portanto, para evitar esse problema, localize o github nesse armazenamento e exclua as credenciais salvas. Depois disso, ao pressionar git, você solicitará suas credenciais e permitirá que você faça o push.

Andrew Gans
fonte
"Você pode ter que verificar o gerenciador de credenciais do Windows e excluir a entrada do github em control panel > user accounts > credential manager > Windows credentials > Generic credentials" detalhes desta postagem: stackoverflow.com/a/37450495
Miguel
Isso funciona para mim, eu estava lutando por quase 2 dias e finalmente cheguei à solução. Muito obrigado.
Sufiyan Ansari
1
Você salvou minha vida!
WriteToBhuwan # 25/18
1
Já enfrentei este problema há mais de um mês obrigado
Samson Nzuki
1
Gênio. Muito obrigado
Vinod Kumar
18

Isso funciona para mim -:

git remote set-url origin https://[email protected]/user/repo.git

Espero que ajude

stevensagaar
fonte
1
bom trabalho. definir usuário!
Marlonpya
1
Essa solução ajudou o git v1.7 no CentOS 6.10 x86. Eu esperava que o promopt de senha fosse exibido (em vez da chave SSH), e foi (anexando <username>@anteriormente github.comno URL remoto). Obrigado!
vulcan raven
17

Acho que @deepwaters conseguiu a resposta correta para versões mais antigas. O URL HTTPS precisa ter o nome de usuário. Eu tinha o git 1.7.0.4 e git push origin masternem sequer pedia uma senha até a adicionar.

nisah
fonte
11

Um código 403 é "Proibido". O servidor viu sua solicitação e a recusou. Você tem permissão para enviar para esse repositório?

Nick Veys
fonte
1
Eu e um amigo estamos tendo o mesmo problema. O repo é meu, e ele não pode empurrar. Como nós consertamos isso?
gibson
como obter persmisson
Bawantha 04/03
9

Na verdade, eu tinha uma solução muito simples para isso. Tudo o que fiz foi editar o arquivo de configuração do git de maneira diferente após a clonagem do repositório. O URL de origem remota é o que você precisa editar no seu arquivo de configuração padrão . Deve parecer como visto abaixo

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = https://*username*@github.com/*username*/*repository*.git
[branch "master"]
    remote = origin
    merge = refs/heads/master
larrytech
fonte
^ this (ou qualquer uma de suas variantes abaixo) #
Austin France
A adição do nome de usuário antes do github.com o corrigiu para mim.
Shane
Você é bem-vindo @ ÅdəəlÅhmåd. Apoie o esforço, votando a resposta para que muitos outros possam apreciar.
larrytech
8

Descobri isso. Eu clonei sobre HTTPS. Configurando minhas chaves SSH públicas, clonando sobre SSH e pressionando SSH, foi corrigido.

Mike
fonte
Hmmm ... mas e quando você não pode usar nada além de https, por causa de um firewall corporativo, por exemplo? ... De acordo com o blog do github, o acesso https foi adicionado ao github apenas para esse fim?
filofel 21/11/11
1
Eu realmente não sei. Eu sempre clono sobre SSH agora.
Mike
Apenas para a posteridade (notei o carimbo de data e hora), com relação ao comentário do filofel: Confira minha resposta listada acima. Tenho a mesma restrição que você mencionou na minha escola e descobriu que estava fornecendo a senha / senha incorreta ao prompt do terminal. Espero que ajude outras pessoas com o mesmo problema.
BMB
8
  1. Clique no seu repositório
  2. No lado direito, clique em "Configurações"
  3. No painel de opções do lado esquerdo, clique em "Colaboradores"
  4. Adicione o nome da pessoa que você conhece no GitHub
  5. Clique em "Adicionar colaboradores"

Depois disso, nosso "Push to Git" funcionou bem.

Krishna
fonte
Obrigado! Realmente util!
sailfish009
7

Faça isso para uma correção temporária

git push -u https://username:[email protected]/username/repo_name.git master

x0v
fonte
simples e funciona
Bawantha 04/03
6

Eu enfrentei o mesmo erro e a causa foi estúpida - não tinha privilégios para confirmar no repositório selecionado. Eu não sabia que tinha que

  1. garfo projeto selecionado primeiro
  2. clonar repositório localmente
  3. confirmar minhas alterações localmente
  4. enviar alterações ao meu clone do github
  5. solicitação pull request para upstream

conforme descrito em https://help.github.com/categories/63/articles

Leos Literak
fonte
1
Não é estúpido, esta é a resposta correta para a maioria dos contribuidores iniciantes em repositórios públicos.
DaReal 18/12/19
5

Para aqueles com permissão negada erro 403 ao usar ssh (de acordo com Xiao ) ou URLs http, tente estes comandos

>git config --global --unset-all credential.helper

>git config --unset-all credential.helper

com direitos de administrador

>git config --system --unset-all credential.helper
Moosa Baloch
fonte
Agora, toda vez que o Git solicitará login e senha. Salve-os completamente git config --global credential.helper store.
precisa saber é o seguinte
4

mude de

url=https://[email protected]/derekerdmann/lunch_call.git 

para

url=ssh://[email protected]/derekerdmann/lunch_call.git

Funciona!

Não esqueça o "git" antes do "@".

JimmyDong
fonte
Funcionou para mim (usando o CentOS Server com o RStudio atrás de proxy). Definir proxy primeiro: git config --global http.proxy http://proxyUsername:[email protected]:portuse o comando git remote set-url originpara alternar o endereço.
Alexandre georges
3

Para qualquer pessoa curiosa, minha máquina mac vs lucid vm executava o git 1.7.6 vs 1.7.0.4, e o mesmo repositório exato era empurrável do meu mac (git mais recente), mas não da VM

Mesma versão de ondulação. Talvez algumas versões mais antigas do git não suportem pushes https?

patcon
fonte
Sim, o https push para o github funciona aqui (mesmo através de proxy com senha). Eu uso o git 1.7.3. Para mim, falhou primeiro porque digitei a senha errada.
guettli
9
Funciona para mim com o git 1.7.1, mas há uma coisa que você deve prestar atenção também (e foi isso que eu perdi na minha primeira tentativa): forneça o nome de usuário no URL HTTPS, ou seja,url=https://[email protected]/username/repo.git
lwho
3

Adicione o nome de usuário como parte da URL e Este erro ocorre porque o comando git está pressionando http em vez de https. Então defina o URL

git remote set-url origin https://<username>@github.com/Path_to_repo.git

Após o qual você será solicitado a senha:

venkat sam
fonte
3

O que funcionou para mim:

Meu repositório era um garfo e ainda estava vinculado ao repositório dos pais.

git remote -v

Dirá se é o seu repo ou não.

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

Permite reconfigurá-lo para seu repositório e, em seguida, permitir que você faça o push.

timxor
fonte
3

Nenhuma das respostas acima funcionou para o meu enterprise conta do GitHub. Siga estas etapas para enviar por meio da geração de chaves ssh.

Crie um repositório visitando sua conta git.

Gere chave ssh:

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

Copie o conteúdo do arquivo ~ / .ssh / id_rsa.pub para suas chaves SSH nas configurações da sua conta do GitHub. Chave SSH de teste:

ssh -T [email protected]
clone the repo:
git clone git://github.com/username/your-repository

Agora vá para a pasta clone do git e faça:

git remote set-url origin [email protected]:username/your-repository.git

Agora tente editar um arquivo (tente o README) e faça:

git add -A
git commit -am "my update msg"
git push -u origin master

Atualização: a nova versão do git parece recomendar não ter nenhum arquivo enquanto um novo repositório é criado. Portanto, faça um repo em branco.

CKM
fonte
2

Eu descobri minha própria variação desse problema.

O problema não foi alterar o protocolo de https para ssl, mas definir o nome de usuário e o email globais do Github! (Eu estava tentando enviar para um repositório privado.

git config --global user.email "[email protected]"

git config --global user.name "Your full name"
Lucas Ou-Yang
fonte
Nao funciona para mim. A configuração foi definida, use github.com .. sem '@' nele
ses
1

Eu estava com esse problema agora e o arquivo /etc/resolver.conf do servidor tinha um endereço IP incorreto. Pode ajudar os outros.

RichardW11
fonte
1

Isso aconteceu comigo porque meu colega de trabalho desativou acidentalmente o repositório do qual o repositório foi bifurcado. Apenas verifique se o repositório original do git (hub) ainda existe.

ftrotter
fonte
1

Pode ser uma questão contábil. A conta Github do proprietário do repositório upstream (privado) pode não ser financeira. Eu vi isso onde o cartão de crédito do cliente expirou.

gnoll110
fonte
1

o que funcionou para mim está mudando de http para ssh:

git remote rm origin
git remote add origin [email protected]:username/repoName.git

depois verifique com git remote -v

Connor Leech
fonte
1

Eu tive o mesmo problema. Meu caso foi: eu inicializei o repositório git localmente antes de criá-lo no github e tentei adicionar ramificação remota. Resolvi meu problema alterando a ordem das ações: criei um repositório no site do github e o iniciei localmente. Mas não é o caso daqueles que gostam de fazer tudo na linha de comando como eu.

Yauhen
fonte