Pousser vers Git renvoyant le code d'erreur 403 fatal: la requête HTTP a échoué

634

J'ai pu cloner une copie de ce dépôt sur HTTPS authentifié. J'ai fait quelques commits et je veux repousser vers le serveur GitHub. Utilisation de Cygwin sur 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

Configurez-le également avec le mode verbeux. Je suis toujours assez déconcerté.

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

Ce sont les versions de git et curl que j'ai:

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
la source
3
Regardez le commentaire, qui devrait être publié comme réponse. Le fait fonctionner avec 1.7.1, avait également le problème d'invite utilisateur / mot de passe manquant. Accessoires à stackoverflow.com/a/9575906/805284 ...
sjas
2
vérifier que l'utilisateur a un accès en lecture / écriture au référentiel
Céline Aussourd
22
À l'avenir, ne collez pas «Autorisation: <stuff> de base» »lors de l'affichage des exemples d'en-têtes http. Il est facile de décoder cela en base64 et d'obtenir votre mot de passe. @mike: si vous n'avez pas changé votre mot de passe github depuis que vous avez posé cette question, je vous suggère de le faire.
FlipMcF
4
@FlipMcF Merci mec. N'était pas au courant. Mot de passe changé.
Mike
6
@Mike NP. Maintenant, je peux promouvoir sans vergogne un petit blog que j'ai écrit dessus: goo.gl/bpae94
FlipMcF

Réponses:

836

Je viens d'avoir le même problème et j'ai juste trouvé la cause.

Github ne prend en charge que la manière ssh de lire et d'écrire le dépôt, bien que la méthode https affiche également `` Lecture et écriture ''.

Vous devez donc changer votre configuration de dépôt sur votre PC en manière ssh:

  1. modifier le .git/configfichier sous votre répertoire repo
  2. trouver l' url=entrée sous la section[remote "origin"]
  3. changer de url=https://[email protected]/derekerdmann/lunch_call.gità url=ssh://[email protected]/derekerdmann/lunch_call.git. c'est-à-dire, changez tous les textes avant le @symbole enssh://git
  4. Enregistrez le configfichier et quittez. maintenant, vous pouvez utiliser git push origin masterpour synchroniser votre dépôt sur GitHub
Xiao
la source
56
Cela se produit souvent lorsque vous clonez avec l'adresse en lecture seule git (qui est la valeur par défaut lorsque vous n'êtes pas connecté) au lieu de l'adresse ssh en lecture + écriture.
Nitrodist
43
Ma .git/configressemblait plus url=https://github.com/mynickname/my_repo.gitmais je l'ai aussi changé url=ssh://[email protected]/mynickname/my_repo.gitet ça a fait l'affaire
Guillaume Flandre
12
Vous pouvez modifier une URL de dépôt avec la git remote set-urlcommande. Voir ma réponse ci-dessous.
fetsh
7
ou tout simplement le changer à partir de la ligne de commande en utilisantgit remote set-url <name> [email protected]:<username>/<repo>.git
iGbanam
42
Pour ceux qui recherchent une solution non ssh, consultez quelques-unes des autres réponses ici. L'ajout de votre nom d'utilisateur à l'URL https semble fonctionner. (changez l'URL de configuration pour que https: // @ github.com / ... soit [email protected] / ... )
Cyrus
431

Pour pouvoir vous connecter définitivement à l'aide du httpsprotocole, vous devez d'abord définir vos informations d'authentification sur l' URI distant git :

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

Un mot de passe vous sera alors demandé lors de la tentative git push.

En fait, c'est sur le format d'authentification http. Vous pouvez également définir un mot de passe:

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

Vous devez savoir que si vous faites cela, votre mot de passe github sera stocké en texte brut dans votre répertoire .git, ce qui n'est évidemment pas souhaitable.

Thiago Macedo
la source
12
SSH bloqué au travail, je dois donc utiliser HTTPS. L'ajout du nom d'utilisateur résout mes problèmes.
David Poole
32
Ce devrait être la réponse acceptée. Aucune raison de modifier manuellement un fichier de configuration lorsqu'il existe une interface de ligne de commande.
Steve Bennett
4
De plus, pour moi, cette façon ( username @ github ... ) a demandé un mot de passe et a fonctionné, alors que ssh: // git @ github ... n'a pas réussi à attendre l'authentification de la clé publique.
Steve Bennett
1
fonctionne et devrait être la réponse acceptée! Surtout dans les environnements où ssh ne fonctionne pas, c'est la voie à suivre. Merci!
AndreasEK
3
@Achint c'est un format d'authentification. Vous pouvez également définir votre mot de passe https://youruser:[email protected]/user/repo.gitmalgré le fait qu'il n'est pas sécurisé
Thiago Macedo
113

Un petit ajout à la réponse de Sean .

Au lieu de modifier le .git/configfichier manuellement, vous pouvez utiliser la git remote set-urlcommande.

Dans votre cas, ce devrait être:

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

Je trouve cela plus facile et plus propre que de jouer avec des fichiers dot.

fetsh
la source
Je ne sais pas si c'est juste un vieux post et git a changé, mais comme aujourd'hui pour résoudre le problème j'ai dû utiliser git remote set-url origin ssh://[email protected]:derekerdmann/lunch_call.gitavec deux points entre github.com et le nom du
dépôt
57

Modifier le .git/configfichier sous votre répertoire repo

Rechercher une url=entrée dans la section[remote "origin"]

Changez - le de url=https://github.com/rootux/ms-Dropdown.gitla https://[email protected]/rootux/ms-Dropdown.git

USERNAMEest votre nom d'utilisateur github

Gal Bracha
la source
Cette réponse ne s'applique pas à mon problème. Mon URL .git/configest définie sur ` github.com/myrepo/subproject ' .
kilojoules
J'ai eu ce problème avec Android Studio. Fonctionne bien.
AndroidDev
46

Les autres réponses qui suggèrent de passer à SSH manquent en quelque sorte le point. HTTPS est pris en charge, mais vous devez vous connecter avec votre mot de passe GITHUB, pas votre mot de passe SSH (qui m'a donné exactement la même erreur).

J'avais le même problème, mais en veillant à utiliser mon mot de passe GitHub réel à l'invite du mot de passe du terminal, la solution a été corrigée sans modification de la configuration ou recours à SSH.

La raison pour laquelle il est important de le noter, c'est que de nombreuses institutions publiques (comme mon école) bloqueront SSH, mais autoriseront HTTPS (c'est la seule raison pour laquelle j'ai commencé à cloner sur HTTPS en premier lieu).

J'espère que cela aide toute personne ayant le même problème ...

BMB
la source
1
mais pourquoi? Je n'avais pas à faire ça dans le passé. Un certificat a-t-il expiré, ou quelque chose?
Thufir
Je ne sais pas, je ne suis pas un expert, c'est comme ça que je l'ai fait fonctionner dans mon cas :)
BMB
Idem @Thufir. Je ne sais pas pourquoi cela a soudainement fonctionné.
Nick Manning
Je me connecte très bien avec mon nom d'utilisateur et mon mot de passe sur le navigateur. MAIS quand j'essaye, git pushje suis invité pour au et p et le résultat est une autorisation refusée .... Savez-vous ce qui me manque?
Omar
26

Même erreur et résolution sur Mac OS X.

Tout fonctionnait bien jusqu'à ce que je crée un nouveau compte sur GitHub et essaye de pousser

$ git push -u origin master

Et j'ai l'erreur:

à distance: autorisation à NEWUSER / NEWREPO.git refusée à OLDUSER. fatal: impossible d'accéder à ' https://github.com/NEWUSER/NEWREPO.git/ ': l'URL demandée a renvoyé l'erreur: 403

Il aurait dû être corrigé en définissant le nom d'utilisateur pour le dépôt global ou actuel

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

Mais ce n'était pas le cas.

Je l'ai corrigé en supprimant le OLDUSER associé à GitHub de l'application Keychain Access dans la section Mots de passe. Ensuite, la commande push a réussi.

$ git push -u origin master

référence

Zeeawan
la source
La suppression de OLDUSER de l'application d'accès au trousseau a fonctionné pour moi
Augusto Triste
1
J'ai eu la même erreur, mais pour une raison différente mais liée qui nécessitait une solution différente. J'essayais de pousser vers un dépôt où je n'ai pas accès en écriture (je ne suis pas un collaborateur). Cela était davantage dû à mon manque de connaissances sur la façon de contribuer à un repo qui n'est pas le mien. Je pensais que je pouvais simplement créer une nouvelle branche, puis faire une demande d'extraction. Mais non. Je dois d'abord fourcher le dépôt, apporter mes modifications sur la fourche, puis faire une demande d'extraction de mon dépôt fourchu vers le dépôt d'origine. Probablement une erreur stupide de ma part, mais si je peux le faire, alors je suis sûr que d'autres n00bs le pourraient. :)
Néo
23

Si vous utilisez Windows, cela peut parfois se produire car Windows stocke les informations d'identification du dépôt externe (dans notre cas, github) dans son propre stockage. Et les informations d'identification qui y ont été enregistrées peuvent être différentes de celles dont vous avez besoin en ce moment.

entrez la description de l'image ici

Donc, pour éviter ce problème, recherchez simplement github dans ce stockage et supprimez les informations d'identification enregistrées. Après cela, tout en poussant git demandera vos informations d'identification et vous permettra de pousser.

Andrew Gans
la source
"Vous devrez peut-être vérifier le gestionnaire d'informations d'identification Windows et supprimer l'entrée github sous control panel > user accounts > credential manager > Windows credentials > Generic credentials" détails de cet article: stackoverflow.com/a/37450495
Miguel
Cela fonctionne pour moi, j'ai eu du mal pendant près de 2 jours et j'ai finalement trouvé la solution. Merci beaucoup.
Sufiyan Ansari
1
Tu m'as sauvé la vie!
writeToBhuwan
1
Je rencontre ce problème depuis plus d'un mois merci
Samson Nzuki
1
Génie. Merci beaucoup
Vinod Kumar
18

Cela fonctionne pour moi -:

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

J'espère que cela aide

stevensagaar
la source
1
Bon travail. définir l'utilisateur!
marlonpya
1
Cette solution a aidé avec git v1.7 dans CentOS 6.10 x86. Je m'attendais à ce que le mot de passe promopt apparaisse (au lieu de la clé SSH), et il l'a fait (en ajoutant <username>@avant github.comdans l'URL distante). Je vous remercie!
vulcan raven
17

Je pense que @deepwaters a obtenu la bonne réponse pour les anciennes versions. L'URL HTTPS doit avoir le nom d'utilisateur. J'avais git 1.7.0.4 et git push origin masterne demandais même pas de mot de passe avant de l'avoir ajouté.

nisah
la source
11

Un code 403 est "Interdit". Le serveur a vu votre demande et l'a refusée. Avez-vous la permission de pousser vers ce référentiel?

Nick Veys
la source
1
Un ami et moi avons le même problème. Le repo est à moi, et il ne peut pas pousser. Comment réparons nous ça?
gibson
comment obtenir persmisson
Bawantha
9

En fait, j'avais une solution très simple à cela. Tout ce que j'ai fait a été de modifier le fichier de configuration git différemment après le clonage du référentiel. L'URL d'origine distante est ce que vous devez modifier dans votre fichier de configuration par défaut . Il devrait ressembler à celui ci-dessous

[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
la source
^ ceci (ou l'une de ses variantes ci-dessous)
Austin France
L'ajout du nom d'utilisateur avant github.com l'a corrigé pour moi.
Shane
Vous êtes les bienvenus @ ÅdəəlÅhmåd. Soutenez l'effort en votant pour la réponse afin que beaucoup d'autres puissent l'apprécier.
larrytech
8

Deviner. J'ai cloné sur HTTPS. La configuration de mes clés SSH publiques, le clonage sur SSH et le fait de pousser sur SSH l'ont corrigé.

Mike
la source
Hmmm ... mais que faire quand vous ne pouvez pas utiliser autre chose que https, à cause d'un pare-feu corp, par exemple? ... Selon le blog github, l'accès https a été ajouté à github juste à cette fin?
filofel
1
Je ne sais vraiment pas. Je clone toujours sur SSH maintenant.
Mike
Juste pour la postérité (j'ai remarqué l'horodatage), en ce qui concerne le commentaire de filofel: Consultez ma réponse ci-dessus. J'ai la même restriction que vous mentionnez, dans mon école, et j'ai découvert que je fournissais le mauvais mot de passe / phrase de passe à l'invite du terminal. J'espère que cela aide tous les autres avec le même problème.
BMB
8
  1. Cliquez sur votre référentiel
  2. Sur le côté droit, cliquez sur "Paramètres"
  3. Dans le panneau d'options de gauche, cliquez sur "Collaborateurs"
  4. Ajoutez le nom de la personne que vous connaissez dans GitHub
  5. Cliquez sur "Ajouter des collaborateurs"

Après cela, notre "Push to Git" a bien fonctionné.

Krishna
la source
Je vous remercie! très utile!
sailfish009
7

Faites ceci pour une correction temporaire

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

x0v
la source
simple et fonctionne
Bawantha
6

J'ai fait face à la même erreur et la cause était stupide - je n'avais pas de privilèges pour valider le référentiel sélectionné. Je ne savais pas que je devais

  1. fork projet sélectionné en premier
  2. cloner le référentiel localement
  3. valider mes modifications localement
  4. pousser les modifications sur mon clone github
  5. demande de pull pull en amont

comme décrit dans https://help.github.com/categories/63/articles

Leos Literak
la source
1
Pas stupide, c'est la bonne réponse pour la plupart des nouveaux contributeurs aux dépôts publics.
DaReal
5

Pour ceux dont la permission a refusé l' erreur 403 lors de l'utilisation de ssh (selon Xiao ) ou des URL http, essayez ces commandes

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

>git config --unset-all credential.helper

avec des droits d'administrateur

>git config --system --unset-all credential.helper
Moosa Baloch
la source
Maintenant, chaque fois que Git demandera un identifiant et un mot de passe. Enregistrez-les git config --global credential.helper store.
CoolMind
4

changer de

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

à

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

Ça marche!

N'oubliez pas le "git" devant le "@".

JimmyDong
la source
Cela a fonctionné pour moi (en utilisant CentOS Server avec RStudio derrière le proxy). Définissez d'abord le proxy: git config --global http.proxy http://proxyUsername:[email protected]:portutilisez ensuite la commande git remote set-url originpour changer l'adresse.
Alexandre georges
3

Pour toute personne curieuse, ma machine mac vs lucid vm a couru git 1.7.6 vs 1.7.0.4, et le même dépôt a été poussé depuis mon mac (git plus récent) mais pas la VM

Même version bouclée. Peut-être que certaines anciennes versions de git ne prennent pas en charge les push https?

patcon
la source
Oui, https push to github fonctionne ici (même via un proxy avec mot de passe). J'utilise git 1.7.3. Pour moi, cela a échoué en premier parce que j'ai tapé le mauvais mot de passe.
guettli
9
Cela fonctionne pour moi avec git 1.7.1, mais il y a une chose à laquelle vous devez également faire attention (et c'est ce que j'ai manqué lors de mon premier essai): Donnez le nom d'utilisateur dans l'URL HTTPS, c'esturl=https://[email protected]/username/repo.git
lwho
3

Ajoutez le nom d'utilisateur dans l'URL et cette erreur se produit car la commande git frappe http au lieu de https. Alors définissez l'url

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

Après quoi, un mot de passe vous sera demandé:

venkat sam
la source
3

Ce qui a fonctionné pour moi:

Mon repo était une fourchette et toujours lié au repo des parents.

git remote -v

Vous dira si c'est votre repo ou non.

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

Vous permet de le reconfigurer dans votre référentiel puis de vous permettre de pousser.

timxor
la source
3

Aucune des réponses ci-dessus n'a fonctionné pour mon enterprisecompte GitHub. Suivez ces étapes pour pousser via la méthode de génération de clé ssh.

Créez un dépôt en visitant votre compte git.

Générez la clé ssh:

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

Copiez le contenu du fichier ~ / .ssh / id_rsa.pub sur vos clés SSH dans les paramètres de votre compte GitHub. Tester la clé SSH:

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

Maintenant, cd dans votre dossier git clone et faites:

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

Maintenant, essayez de modifier un fichier (essayez le fichier README), puis procédez comme suit:

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

Mise à jour: la nouvelle version de git semble recommander de ne pas avoir de fichier pendant la création du nouveau dépôt. Faites donc un repo vierge.

CKM
la source
2

J'ai compris ma propre variante de ce problème.

Le problème n'était pas de changer le protocole de https à ssl, mais de définir le nom d'utilisateur et l'e-mail Github global! (J'essayais de pousser vers un référentiel privé.

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

git config --global user.name "Your full name"
Lucas Ou-Yang
la source
Ça ne marche pas pour moi. La configuration a été définie, utilisez github.com .. sans "@"
ses
1

J'ai eu ce problème en ce moment et il s'est avéré que mon fichier serveur /etc/resolver.conf avait une mauvaise adresse IP. Pourrait aider les autres.

RichardW11
la source
1

Cela m'est arrivé parce que mon collègue a accidentellement désactivé le référentiel à partir duquel ce référentiel a été créé. Je pourrais peut-être vérifier que le dépôt git (hub) d'origine existe toujours.

ftrotter
la source
1

Ce pourrait être un problème de comptabilité. Le compte Github du propriétaire du repo en amont (privé) peut ne pas être financier. J'ai vu cela où la carte de crédit du client a expiré.

gnoll110
la source
1

ce qui a fonctionné pour moi passe de http à ssh:

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

puis vérifiez avec git remote -v

Connor Leech
la source
1

J'ai eu le même problème. Mon cas était: j'avais initialisé git repo localement avant de le créer sur github, puis j'ai essayé d'ajouter une branche distante. J'ai résolu mon problème en changeant l'ordre des actions: créé un dépôt sur le site github, puis l'initié localement. Mais ce n'est pas le cas pour eux qui aiment tout faire en ligne de commande comme moi.

Yauhen
la source