Invio a Git con restituzione del codice di errore 403 fatale: richiesta HTTP non riuscita


634

Sono stato in grado di clonare una copia di questo repository su HTTPS autenticato. Ho effettuato alcuni commit e voglio tornare al server GitHub. Utilizzo di Cygwin su Windows 7 x64.

C:\cygwin\home\XPherior\Code\lunch_call>git push
Password:
error: The requested URL returned error: 403 while accessing https://MichaelDrog
alis@github.com/derekerdmann/lunch_call.git/info/refs

fatal: HTTP request failed

Impostalo anche con la modalità dettagliata. Sono ancora piuttosto sconcertato.

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://MichaelDrogalis@github.com/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
alis@github.com/derekerdmann/lunch_call.git/info/refs

fatal: HTTP request failed

Queste sono le versioni di git e curl che ho:

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

3
Guarda il commento, che dovrebbe essere pubblicato come risposta. Ha funzionato con 1.7.1, ha avuto anche il problema di richiesta User / Password mancante. Props a stackoverflow.com/a/9575906/805284 ...
sjas

2
controlla che l'utente abbia accesso in lettura / scrittura al repository
Céline Aussourd

22
In futuro, non incollare "Autorizzazione: <stuff> di base" quando vengono mostrate le intestazioni http di esempio. È facile decodificarlo in base64 e ottenere la tua password. @mike: se non hai cambiato la tua password github da quando hai pubblicato questa domanda, ti suggerirei di farlo.
FlipMcF

4
@FlipMcF Grazie amico. Ignaro. Password cambiata.
Mike

6
@Mike NP. Ora posso promuovere spudoratamente un piccolo blog su cui ho scritto: goo.gl/bpae94
FlipMcF

Risposte:


836

Ho appena avuto lo stesso problema e ho appena capito qual è la causa.

Github sembra supportare solo il modo ssh per leggere e scrivere il repository, sebbene il modo https visualizzi anche 'Leggi e scrivi'.

Quindi è necessario modificare la configurazione del repository sul PC in modo ssh:

  1. modifica il .git/configfile nella tua directory repo
  2. trova la url=voce nella sezione[remote "origin"]
  3. cambiarlo da url=https://MichaelDrogalis@github.com/derekerdmann/lunch_call.gita url=ssh://git@github.com/derekerdmann/lunch_call.git. cioè, cambia tutti i testi prima del @simbolo inssh://git
  4. Salva il configfile ed esci. ora puoi usare git push origin masterper sincronizzare il tuo repository su GitHub

56
Questo si verifica spesso quando si clona con l'indirizzo di sola lettura git (che è l'impostazione predefinita quando non si è effettuato l'accesso) invece dell'indirizzo ssh read + write.
Nitrodist,

43
Il mio .git/configera più simile url=https://github.com/mynickname/my_repo.gitMa l'ho anche cambiato url=ssh://git@github.com/mynickname/my_repo.gite ha fatto il trucco
Guillaume Flandre,

12
È possibile modificare un URL repo con git remote set-urlcomando. Vedi la mia risposta qui sotto.
fetsh,

7
o semplicemente cambiarlo dalla riga di comando usandogit remote set-url <name> git@github.com:<username>/<repo>.git
iGbanam

42
Per coloro che cercano una soluzione non SSH, controlla alcune delle altre risposte qui. L'aggiunta del tuo nome utente all'URL https sembra funzionare. (modifica l'URL di configurazione in modo che https: // @ github.com / ... sia UNAME@github.com / ... )
Cyrus,

431

Per poter assolutamente accedere utilizzando il httpsprotocollo, è necessario prima impostare le credenziali di autenticazione sull'URI remoto git :

git remote set-url origin https://yourusername@github.com/user/repo.git

Quindi ti verrà chiesta una password quando provi a farlo git push.

In realtà, questo è nel formato di autenticazione http. Puoi anche impostare una password:

https://youruser:password@github.com/user/repo.git

Dovresti essere consapevole che se lo fai, la tua password github sarà memorizzata in chiaro nella tua directory .git, che è ovviamente indesiderabile.


12
SSH bloccato al lavoro, quindi devo usare HTTPS. L'aggiunta del nome utente risolve i miei problemi.
David Poole,

32
Questa dovrebbe essere la risposta accettata. Nessun motivo per modificare manualmente un file di configurazione quando è presente un'interfaccia della riga di comando.
Steve Bennett,

4
Inoltre, per me, in questo modo ( nome utente @ github ... ) ha chiesto la password e ha funzionato, mentre ssh: // git @ github ... non è riuscito ad aspettarsi l'autenticazione della chiave pubblica.
Steve Bennett,

1
funziona e dovrebbe essere la risposta accettata! Soprattutto in ambienti in cui ssh non funziona, questa è la strada da percorrere. Grazie!
AndreasEK,

3
@Achint è un formato di autenticazione. Puoi anche impostare la tua password https://youruser:password@github.com/user/repo.gitnonostante non sia sicura
Thiago Macedo

113

Una piccola aggiunta alla risposta di Sean .

Invece di modificare .git/configmanualmente il file, puoi usare il git remote set-urlcomando.

Nel tuo caso dovrebbe essere:

git remote set-url origin ssh://git@github.com/derekerdmann/lunch_call.git

Lo trovo più facile e più pulito, che scherzare con i file dot.


Non so se questo è solo un vecchio post e git è cambiato, ma come oggi per risolvere il problema ho dovuto usare i git remote set-url origin ssh://git@github.com:derekerdmann/lunch_call.gitdue punti tra github.com e il nome repo
KevinL

56

Modifica il .git/configfile nella tua directory repo

Trova la url=voce nella sezione[remote "origin"]

Cambia da url=https://github.com/rootux/ms-Dropdown.gita https://USERNAME@github.com/rootux/ms-Dropdown.git

dov'è il USERNAMEtuo nome utente github


Questa risposta non si applicava al mio problema. Il mio URL .git/configè impostato su ` github.com/myrepo/subproject ' .
kilojoules,

Ha avuto questo problema con Android Studio. Funziona bene.
AndroidDev,

46

Le altre risposte che suggeriscono di passare al tipo di SSH mancano il punto. HTTPS è supportato, ma è necessario accedere con la password GITHUB, non con la passphrase SSH (che era ciò che mi stava dando lo stesso errore esatto).

Stavo avendo lo stesso problema, ma assicurandomi di utilizzare la mia password GitHub effettiva al prompt della password del terminale risolto la soluzione senza alterare la configurazione o ricorrendo a SSH.

Il motivo per cui è importante notare questo, è che molte istituzioni pubbliche (come la mia scuola) bloccano SSH, ma consentono HTTPS (che è l'unica ragione per cui ho iniziato a clonare su HTTPS in primo luogo).

Spero che possa aiutare chiunque abbia lo stesso problema ...


1
ma perché? Non dovevo farlo in passato. Un certificato è scaduto o qualcosa del genere?
Giovedì

Non sono sicuro, non sono un esperto, è così che l'ho fatto funzionare nel mio caso :)
BMB

Lo stesso @Thufir. Non ho idea del perché all'improvviso abbia funzionato.
Nick Manning,

Accedo bene con il mio nome utente e password sul browser. MA quando provo git pushmi viene richiesto au e p e il risultato viene negato l'autorizzazione .... Sai cosa mi manca?
Omar,

26

Stesso errore e risoluzione su Mac OS X.

Tutto funzionava bene fino a quando non ho creato un nuovo account su GitHub e ho provato a spingere

$ git push -u origin master

E ottenuto l'errore:

remoto: autorizzazione a NEWUSER / NEWREPO.git negata a OLDUSER. fatale: impossibile accedere a " https://github.com/NEWUSER/NEWREPO.git/ ": errore URL restituito richiesto: 403

Avrebbe dovuto essere risolto impostando user.name per il repository globale o corrente

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

Ma non lo fece.

L'ho risolto eliminando OLDUSER associato a GitHub dall'app Accesso Portachiavi nella sezione Password. Quindi il comando push ha avuto successo.

$ git push -u origin master

riferimento


L'eliminazione di OLDUSER dall'app di accesso al portachiavi ha funzionato per me
Augusto Triste

1
Ho avuto lo stesso errore, ma per un motivo diverso ma correlato che ha richiesto una soluzione diversa. Stavo cercando di passare a un repository in cui non ho accesso in scrittura (non sono un collaboratore). Ciò è dovuto principalmente alla mia mancanza di conoscenza su come contribuire a un repository che non è mio. Pensavo di poter semplicemente creare un nuovo ramo e quindi fare una richiesta pull. Non così. Devo prima effettuare il fork del repository, apportare le modifiche al fork, quindi fare una richiesta pull dal mio repository a forcella al repository originale. Probabilmente un errore stupido da parte mia, ma se posso farcela, allora sono sicuro che altri n00bs potrebbero farlo. :)
Neo,

23

Se si utilizza Windows, a volte ciò può accadere perché Windows archivia le credenziali per il repository esterno (nel nostro caso github) nella propria memoria. E le credenziali che ci sono state salvate possono essere diverse da quelle di cui hai bisogno in questo momento.

inserisci qui la descrizione dell'immagine

Quindi, per evitare questo problema, basta trovare github in questo archivio ed eliminare le credenziali salvate. Dopodiché, mentre spingi git ti chiederanno le tue credenziali e ti permetteranno di spingere.


"Potrebbe essere necessario controllare Windows Credential Manager ed eliminare la voce github in control panel > user accounts > credential manager > Windows credentials > Generic credentials" dettagli da questo post: stackoverflow.com/a/37450495
Miguel

Questo funziona per me, ho lottato per quasi 2 giorni e finalmente sono arrivato alla soluzione. Grazie mille.
Sufiyan Ansari,

1
Mi hai salvato la vita!
scrivi a Tohuhu il

1
Ho affrontato questo problema per più di un mese grazie
Samson Nzuki

1
Genio. Grazie mille
Vinod Kumar il

18

Questo funziona per me -:

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

Spero che sia d'aiuto


1
bel lavoro. imposta utente!
marlonpya,

1
Questa soluzione ha aiutato con git v1.7 in CentOS 6.10 x86. Mi aspettavo che venisse visualizzata la password (anziché la chiave SSH), e lo ha fatto (anteponendo <username>@prima github.coml'URL remoto). Grazie!
corvo vulcanico

17

Penso che @deepwaters abbia ottenuto la risposta corretta per le versioni precedenti. L'URL HTTPS deve avere il nome utente. Avevo git 1.7.0.4 e git push origin masternon avrei nemmeno chiesto una password fino a quando non l'ho aggiunta.



11

Un codice 403 è "Proibito". Il server ha visualizzato la tua richiesta e l'ha rifiutata. Hai il permesso di inviare a quel repository?


1
Io e un amico abbiamo lo stesso problema. Il repository è mio e non può spingere. come lo aggiustiamo?
Gibson,

come ottenere
persmisson

9

In realtà ho avuto una soluzione molto semplice a questo. Tutto quello che ho fatto è stato modificare il file di configurazione git in modo diverso dopo aver clonato il repository. L'URL di origine remoto è ciò che è necessario modificare nel file di configurazione predefinito . Dovrebbe apparire come sotto

[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

^ questo (o una qualsiasi delle sue varianti di seguito)
Austin France

L'aggiunta del nome utente prima che github.com lo riparasse per me.
Shane,

Sei il benvenuto @ ÅdəəlÅhmåd. Sostieni lo sforzo votando la risposta in modo che molti altri possano apprezzare.
larrytech,

8

Capito. Ho clonato su HTTPS. L'impostazione delle mie chiavi SSH pubbliche, la clonazione su SSH e la pressione su SSH l'hanno risolta.


Hmmm ... ma cosa succede quando non puoi usare altro che https, ad esempio a causa di un firewall corp? ... Secondo il blog di github, l'accesso a https è stato aggiunto a github solo per quello scopo?
filofel,

1
Davvero non lo so. Ho sempre clonato su SSH ora.
Mike,

Solo per i posteri (ho notato il timestamp), per quanto riguarda il commento di filofel: controlla la mia risposta sopra elencata. Ho la stessa restrizione che mi dici, nella mia scuola, e ho scoperto che stavo fornendo la password / passphrase errata al prompt del terminale. Spero che aiuti tutti gli altri con lo stesso problema.
BMB,

8
  1. Fai clic sul tuo repository
  2. Sul lato destro, fai clic su "Impostazioni"
  3. Nel riquadro delle opzioni a sinistra, fai clic su "Collaboratori"
  4. Aggiungi il nome della persona che conosci in GitHub
  5. Fai clic su "Aggiungi collaboratori"

Dopo questo il nostro "Push to Git" ha funzionato bene.


Grazie! davvero utile!
sailfish009


7

Fallo per una correzione temporanea

git push -u https://username:password@github.com/username/repo_name.git master


semplice e funziona
Bawantha il

6

Ho riscontrato lo stesso errore e la causa è stata stupida: non avevo i privilegi per impegnarmi nel repository selezionato. Non sapevo di doverlo fare

  1. fork primo progetto selezionato
  2. clone repository localmente
  3. impegna le mie modifiche localmente
  4. spingere le modifiche al mio clone github
  5. richiesta pull richiesta a monte

come descritto in https://help.github.com/categories/63/articles


1
Non stupida, questa è la risposta corretta per la maggior parte dei contributori per la prima volta ai repository pubblici.
DaReal,

5

Per coloro a cui è stato negato il permesso 403 errore durante l'utilizzo di URL ssh (secondo Xiao ) o http provare questi comandi

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

>git config --unset-all credential.helper

con diritti di amministratore

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

Ora ogni volta che Git chiederà login e password. Salvali attraverso git config --global credential.helper store.
CoolMind,

4

cambiarlo da

url=https://MichaelDrogalis@github.com/derekerdmann/lunch_call.git 

per

url=ssh://git@github.com/derekerdmann/lunch_call.git

Funziona!

Non dimenticare "git" prima di "@".


Ha funzionato per me (usando CentOS Server con RStudio dietro proxy). Imposta prima il proxy: git config --global http.proxy http://proxyUsername:proxyPassword@proxy.server.com:portquindi utilizza il comando git remote set-url originper cambiare l'indirizzo.
Alexandre georges,

3

Per chiunque sia curioso, il mio mac machine vs lucid vm ha eseguito git 1.7.6 vs 1.7.0.4, e lo stesso repository esatto era pushable dal mio mac (git più recente) ma non dalla VM

Stessa versione arricciata. Forse alcune versioni precedenti di git non supportano i push https?


Sì, https push to github funziona qui (anche tramite proxy con password). Uso git 1.7.3. Per me, non è riuscito perché ho digitato la password sbagliata.
Guettli,

9
Funziona per me con git 1.7.1, ma c'è anche una cosa a cui devi prestare attenzione (ed è quello che mi è sfuggito al mio primo tentativo): dai il nome utente nell'URL HTTPS, ovverourl=https://username@github.com/username/repo.git
lho

3

Aggiungi il nome utente come parte dell'URL e questo errore si verifica perché il comando git sta colpendo http invece di https. Quindi imposta l'URL

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

Dopo di che ti verrà richiesta la password:


3

Cosa ha funzionato per me:

Il mio repository era un fork e ancora collegato al repository dei genitori.

git remote -v

Ti dirà se è il tuo repository o meno.

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

Ti consente di riconfigurarlo nel tuo repository e quindi di spingerlo.


3

Nessuna delle risposte sopra ha funzionato per il mio enterpriseaccount GitHub. Seguire questi passaggi per spingere via la generazione di chiavi ssh.

Crea un repository visitando il tuo account Git.

Genera chiave ssh:

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

Copia il contenuto del file ~ / .ssh / id_rsa.pub nelle chiavi SSH nelle impostazioni dell'account GitHub. Test della chiave SSH:

ssh -T git@github.com
clone the repo:
git clone git://github.com/username/your-repository

Ora cd nella cartella del clone di git ed eseguire:

git remote set-url origin git@github.com:username/your-repository.git

Ora prova a modificare un file (prova il file README) e quindi esegui:

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

Aggiornamento: la nuova versione di git sembra raccomandare di non avere alcun file durante la creazione di un nuovo repository. Quindi crea un repository vuoto.


2

Ho capito la mia variazione di questo problema.

Il problema non stava cambiando il protocollo da https a ssl, ma invece, impostando il nome utente globale e l'e-mail di Github! (Stavo cercando di spingere in un repository privato.

git config --global user.email "your_github_email_@email.com"

git config --global user.name "Your full name"

Non funziona per me. Config è stato impostato, usare github.com .. con no '@' in essa
SES


1

Ho avuto questo problema in questo momento, e ho scoperto che il mio file /etc/resolver.conf del mio server aveva un indirizzo IP errato. Potrebbe aiutare gli altri.


1

Questo mi è successo perché il mio collega ha disabilitato accidentalmente il repository da cui questo repository è stato biforcuto. Potrei solo verificare che il repository originale git (hub) esista effettivamente.


1

Potrebbe essere un problema di contabilità. Il conto Github del proprietario del repository (privato) a monte potrebbe non essere finanziario. Ho visto questo dove è scaduta la carta di credito del cliente.


1

ciò che ha funzionato per me sta cambiando da http a ssh:

git remote rm origin
git remote add origin git@github.com:username/repoName.git

quindi controllalo con git remote -v


1

Ho avuto lo stesso problema. Il mio caso era: avevo inizializzato localmente il repository git prima di crearlo su github, quindi ho provato ad aggiungere il ramo remoto. Ho risolto il mio problema modificando l'ordine delle azioni: ho creato un repository sul sito di Github, quindi l'ho avviato localmente. Ma non è il caso di coloro a cui piace fare tutto dalla riga di comando come me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.