Empujar a Git devolviendo el código de error 403 fatal: solicitud HTTP fallida

634

Pude clonar una copia de este repositorio a través de HTTPS autenticado. He realizado algunas confirmaciones y quiero volver al servidor de GitHub. Usando Cygwin en 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

También configúrelo con el modo detallado. Todavía estoy bastante desconcertado.

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 son las versiones de git y curl que tengo:

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
Miguel
fuente
3
Mire el comentario, que debe publicarse como respuesta. Lo hizo funcionar con 1.7.1, también tenía el problema de solicitud de usuario / contraseña faltante. Props to stackoverflow.com/a/9575906/805284 ...
sjas
2
comprobar que el usuario tiene acceso de lectura / escritura al repositorio
Céline Aussourd
22
En el futuro, no pegue "Autorización: Basic <stuff>" cuando muestre encabezados http de ejemplo. Es fácil decodificarlo en base64 y obtener su contraseña. @mike: si no ha cambiado su contraseña de github desde que publicó esta pregunta, le sugiero que lo haga.
FlipMcF
44
@FlipMcF Gracias hombre. No estaba al tanto. Contraseña cambiada.
Mike
66
@ Mike NP. Ahora puedo promocionar descaradamente un pequeño blog que escribí sobre él: goo.gl/bpae94
FlipMcF

Respuestas:

836

Acabo de tener el mismo problema y descubrí cuál es la causa.

Parece que Github solo admite la forma ssh para leer y escribir el repositorio, aunque la forma https también muestra 'Leer y escribir'.

Por lo tanto, debe cambiar su configuración de repositorio en su PC a ssh:

  1. editar .git/configarchivo bajo su directorio de repositorios
  2. encontrar url=entrada en la sección[remote "origin"]
  3. cámbielo de url=https://[email protected]/derekerdmann/lunch_call.gita url=ssh://[email protected]/derekerdmann/lunch_call.git. es decir, cambie todos los textos antes del @símbolo assh://git
  4. Guarde el configarchivo y salga. ahora puedes usar git push origin masterpara sincronizar tu repositorio en GitHub
Xiao
fuente
56
Esto a menudo se encuentra cuando clonas con la dirección de solo lectura git (que es la predeterminada cuando no estás conectado) en lugar de la dirección ssh de lectura + escritura.
Nitrodist
43
Mi .git/configera más como url=https://github.com/mynickname/my_repo.gitPero también lo cambié url=ssh://[email protected]/mynickname/my_repo.gity funcionó
Guillaume Flandre
12
Puede cambiar una URL de repositorio con el git remote set-urlcomando. Vea mi respuesta a continuación.
fetsh
77
o simplemente cámbielo desde la línea de comando usandogit remote set-url <name> [email protected]:<username>/<repo>.git
iGbanam
42
Para aquellos que buscan una solución que no sea SSH, verifique algunas de las otras respuestas aquí. Agregar su nombre de usuario a la URL https parece funcionar. (cambie la URL de configuración para que https: // @ github.com / ... sea [email protected] / ... )
Cyrus
431

Para poder iniciar sesión definitivamente usando el httpsprotocolo, primero debe configurar su credencial de autenticación en el URI remoto de git :

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

Luego se te pedirá una contraseña cuando lo intentes git push.

De hecho, esto está en el formato de autenticación http. También puede establecer una contraseña:

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

Debe tener en cuenta que si hace esto, su contraseña de github se almacenará en texto sin formato en su directorio .git, lo que obviamente no es deseable.

Thiago Macedo
fuente
12
SSH bloqueado en el trabajo, así que tengo que usar HTTPS. Agregar el nombre de usuario soluciona mis problemas.
David Poole
32
Esta debería ser la respuesta aceptada. No hay razón para editar manualmente un archivo de configuración cuando hay una interfaz de línea de comando.
Steve Bennett
44
Además, para mí, de esta manera ( username @ github ... ) solicitó contraseña y funcionó, mientras que ssh: // git @ github ... falló al esperar la autenticación de clave pública.
Steve Bennett
1
funciona y debe ser la respuesta aceptada! Especialmente en entornos en los que ssh no funciona, este es el camino a seguir. ¡Gracias!
AndreasEK
3
@Achint es un formato de autenticación. También puede establecer su contraseña a https://youruser:[email protected]/user/repo.gitpesar de no ser segura
Thiago Macedo
113

Una pequeña adición a la respuesta de Sean. .

En lugar de editar el .git/configarchivo manualmente, puede usargit remote set-url comando.

En su caso debería ser:

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

Me resulta más fácil y limpio que jugar con los archivos de puntos.

fetsh
fuente
No sé si esto es solo una publicación antigua y git ha cambiado, pero como hoy para solucionar el problema, tuve que usar git remote set-url origin ssh://[email protected]:derekerdmann/lunch_call.gitun colon entre github.com y el nombre del repositorio
KevinL
57

Edite el .git/configarchivo en su directorio de repositorios

Buscar url=entrada en la sección[remote "origin"]

Cámbielo de url=https://github.com/rootux/ms-Dropdown.gita https://[email protected]/rootux/ms-Dropdown.git

donde USERNAMEesta tu nombre de usuario github

Gal Bracha
fuente
Esta respuesta no se aplica a mi problema. Mi URL .git/configestá configurada en ` github.com/myrepo/subproject ' .
kilojulios
Tuve este problema con Android Studio. Funciona bien.
AndroidDev
46

Las otras respuestas que sugieren cambiar a SSH son algo erróneas. HTTPS es compatible, pero debe iniciar sesión con su contraseña de GITHUB, no con su frase de contraseña SSH (que era lo que me daba el mismo error exacto).

Estaba teniendo el mismo problema, pero al asegurarme de usar mi contraseña real de GitHub en el indicador de contraseña del terminal, solucioné la solución sin alterar la configuración o recurrir a SSH.

La razón por la que es importante tener esto en cuenta es que muchas instituciones públicas (como mi escuela) bloquearán SSH, pero permiten HTTPS (que es la única razón por la que comencé a clonar sobre HTTPS en primer lugar).

Espero que ayude a cualquier otra persona que tenga el mismo problema ...

BMB
fuente
1
¿pero por qué? No tuve que hacer eso en el pasado. ¿Caducó un certificado o algo así?
Thufir
No estoy seguro, no soy un experto, así es como lo hice funcionar en mi caso :)
BMB
El mismo @Thufir. No tengo idea de por qué esto funcionó de repente.
Nick Manning
Me conecto bien con mi nombre de usuario y contraseña en el navegador. PERO cuando lo intento git push, se me solicita au y p y el resultado es un permiso denegado ... ¿Sabes lo que me falta?
Omar
26

Mismo error y resolución en Mac OS X.

Todo funcionaba bien hasta que creé una nueva cuenta en GitHub e intenté impulsar

$ git push -u origin master

Y obtuve el error:

remoto: permiso de NEWUSER / NEWREPO.git denegado a OLDUSER. fatal: no se puede acceder a ' https://github.com/NEWUSER/NEWREPO.git/ ': la URL solicitada devolvió el error: 403

Debería haberse solucionado estableciendo user.name para repositorio global o actual

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

Pero no fue así.

Lo solucioné eliminando el OLDUSER asociado con GitHub de la aplicación Keychain Access en la sección Contraseñas. Entonces el comando push fue exitoso.

$ git push -u origin master

referencia

zeeawan
fuente
Eliminar el OLDUSER de la aplicación Keychain Access funcionó para mí
Augusto Triste
1
Obtuve el mismo error, pero por una razón diferente pero relacionada que requería una solución diferente. Estaba tratando de llegar a un repositorio donde no tengo acceso de escritura (no soy colaborador). Esto se debió más a mi falta de conocimiento sobre cómo contribuir a un repositorio que no es mío. Pensé que podría crear una nueva rama y luego hacer una solicitud de extracción. No tan. Primero tengo que bifurcar el repositorio, hacer mis cambios en el tenedor, luego hacer una solicitud de extracción de mi repositorio bifurcado al repositorio original. Probablemente fue un error tonto de mi parte, pero si puedo hacerlo, estoy seguro de que otros n00bs podrían hacerlo. :)
Neo
23

Si está utilizando Windows, a veces esto puede suceder porque Windows almacena credenciales para repositorio externo (en nuestro caso github) en su propio almacenamiento. Y las credenciales que se guardaron allí pueden ser diferentes de las que necesita en este momento.

ingrese la descripción de la imagen aquí

Entonces, para evitar este problema, solo busque github en este almacenamiento y elimine las credenciales guardadas. Después de esto, mientras presiona git solicitará sus credenciales y le permitirá presionar.

Andrew Gans
fuente
"Puede que tenga que verificar el administrador de credenciales de Windows y eliminar la entrada de github en control panel > user accounts > credential manager > Windows credentials > Generic credentials" detalles de esta publicación: stackoverflow.com/a/37450495
Miguel
Esto funciona para mí, estuve luchando durante casi 2 días y finalmente llegué a la solución. Muchas gracias.
Sufiyan Ansari
1
¡Me salvaste la vida!
writeToBhuwan
1
Me he enfrentado a este problema durante más de un mes, gracias
Samson Nzuki
1
Genio. Muchas gracias
Vinod Kumar
18

Esto funciona para mí:

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

Espero eso ayude

stevensagaar
fuente
1
buen trabajo. establecer usuario!
marlonpya
1
Esta solución ayudó con git v1.7 en CentOS 6.10 x86. Esperaba que se mostrara la solicitud de contraseña (en lugar de la clave SSH), y lo hizo (anteponiendo <username>@antes github.comen una URL remota). ¡Gracias!
Cuervo vulcano
17

Creo que @deepwaters obtuvo la respuesta correcta para versiones anteriores. La URL HTTPS debe tener el nombre de usuario. Tenía git 1.7.0.4 y git push origin masterni siquiera pediría una contraseña hasta que la agregue.

nisah
fuente
11

Un código 403 está "Prohibido". El servidor vio su solicitud y la rechazó. ¿Tienes permiso para ingresar a ese repositorio?

Nick Veys
fuente
1
Un amigo y yo estamos teniendo el mismo problema. El repositorio es mío, y él no puede presionar. ¿Cómo arreglamos esto?
Gibson
cómo conseguir persmisson
Bawantha
9

De hecho, tuve una solución muy simple para esto. Todo lo que hice fue editar el archivo de configuración de git de manera diferente después de clonar el repositorio. La URL de origen remota es lo que necesita editar en su archivo de configuración predeterminado . Debería verse como se ve a continuación

[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
fuente
^ esto (o cualquiera de sus variantes a continuación)
Austin France
Agregar el nombre de usuario antes de que github.com lo arreglara por mí.
Shane
De nada @ ÅdəəlÅhmåd. Apoye el esfuerzo votando la respuesta para que muchos otros puedan apreciarla.
larrytech
8

Lo averigué. Cloné sobre HTTPS. Configurar mis claves SSH públicas, clonar sobre SSH y presionar sobre SSH lo arregló.

Miguel
fuente
Hmmm ... pero, ¿qué sucede cuando no puedes usar nada más que https, debido a un firewall de cuerpo, por ejemplo? ... Según el blog de github, ¿el acceso https se agregó a github solo para ese propósito?
filofel
1
Realmente no lo se. Siempre clono sobre SSH ahora.
Mike
Solo para la posteridad (noté la marca de tiempo), en lo que respecta al comentario de filofel: Mira mi respuesta mencionada anteriormente. Tengo la misma restricción que mencionas, en mi escuela, y descubrí que estaba proporcionando la contraseña / frase de contraseña incorrecta al indicador del terminal. Espero que ayude a otros con el mismo problema.
BMB
8
  1. Haga clic en su repositorio
  2. En el lado derecho, haga clic en "Configuración"
  3. En el panel de opciones del lado izquierdo, haga clic en "Colaboradores"
  4. Agregue el nombre de la persona que conoce en GitHub
  5. Haga clic en "Agregar colaboradores"

Después de esto, nuestro "Push to Git" funcionó bien.

Krishna
fuente
¡Gracias! ¡de mucha ayuda!
sailfish009
7

Haga esto para una solución temporal

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

x0v
fuente
simple y funciona
Bawantha
6

Enfrenté el mismo error y la causa fue estúpida: no tenía privilegios para comprometerme con el repositorio seleccionado. No sabía que tenía que

  1. tenedor seleccionado proyecto primero
  2. clonar repositorio localmente
  3. comprometer mis cambios localmente
  4. empujar cambios a mi clon de github
  5. solicitud de solicitud de extracción a aguas arriba

como se describe en https://help.github.com/categories/63/articles

Leos Literak
fuente
1
No es estúpido, esta es la respuesta correcta para la mayoría de los contribuyentes nuevos a los repositorios públicos.
DaReal
5

Para aquellos que tienen permiso denegado 403 error al usar ssh (de acuerdo con Xiao ) o http urls intente estos comandos

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

>git config --unset-all credential.helper

con derechos de administrador

>git config --system --unset-all credential.helper
Moosa Baloch
fuente
Ahora, cada vez que Git le pedirá su nombre de usuario y contraseña. Guárdalos git config --global credential.helper store.
CoolMind
4

cambiarlo de

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

a

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

¡Funciona!

No olvides el "git" antes de la "@".

JimmyDong
fuente
Funcionó para mí (usando CentOS Server con RStudio detrás del proxy). Establecer proxy primero: git config --global http.proxy http://proxyUsername:[email protected]:portluego use el comando git remote set-url originpara cambiar la dirección.
Alexandre georges
3

Para cualquier persona curiosa, mi máquina Mac vs Lucid VM corrió git 1.7.6 vs 1.7.0.4, y el mismo repositorio fue empujable desde mi Mac (git más nuevo) pero no la VM

La misma versión de rizo. ¿Quizás algunas versiones anteriores de git no admiten empujes https?

Patcon
fuente
Sí, https push to github funciona aquí (incluso a través de proxy con contraseña). Yo uso git 1.7.3. Para mí, falló primero porque escribí la contraseña incorrecta.
guettli
99
Me funciona con git 1.7.1, pero hay una cosa a la que también debes prestar atención (y eso fue lo que me perdí en mi primer intento): da el nombre de usuario en la URL HTTPS, es decirurl=https://[email protected]/username/repo.git
lwho
3

Agregue el nombre de usuario como parte de la URL y este error ocurre porque el comando git está presionando http en lugar de https. Así que configura la url

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

Después de lo cual se le pedirá la contraseña:

Venkat Sam
fuente
3

Lo que funcionó para mí:

Mi repositorio era un tenedor y todavía estaba vinculado al repositorio de los padres.

git remote -v

Te diré si es tu repositorio o no.

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

Le permite reconfigurarlo a su repositorio y luego le permite presionar.

Timxor
fuente
3

Ninguna de las respuestas anteriores funcionó para mi enterprise cuenta de GitHub. Siga estos pasos para empujar a través de la generación de claves ssh.

Crea un repositorio visitando tu cuenta de git.

Generar clave ssh:

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

Copie el contenido del archivo ~ / .ssh / id_rsa.pub a sus claves SSH en la configuración de su cuenta de GitHub. Prueba de clave SSH:

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

Ahora cd a tu carpeta git clone y haz:

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

Ahora intente editar un archivo (pruebe el archivo README) y luego haga:

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

Actualización: la nueva versión de git parece recomendar no tener ningún archivo mientras se crea un nuevo repositorio. Por lo tanto, haga un repositorio en blanco.

CKM
fuente
2

Descubrí mi propia variación de este problema.

¡El problema no era cambiar el protocolo de https a ssl, sino establecer el nombre de usuario global y el correo electrónico de Github! (Estaba tratando de ingresar a un repositorio privado.

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

git config --global user.name "Your full name"
Lucas Ou-Yang
fuente
No funciona para mi Se configuró la configuración, use github.com .. sin '@' en ella
ses
1

Tuve este problema en este momento, y resultó que mi archivo /etc/resolver.conf del servidor tenía una dirección IP incorrecta. Podría ayudar a otros.

RichardW11
fuente
1

Esto me sucedió porque mi compañero de trabajo deshabilitó accidentalmente el repositorio del que se bifurcó este repositorio. Solo podría verificar para asegurarse de que el repositorio original de git (hub) todavía exista.

ftrotter
fuente
1

Podría ser un problema contable. La cuenta de Github del propietario del repositorio ascendente (privado) puede no ser financiera. He visto esto donde la tarjeta de crédito del cliente expiró.

gnoll110
fuente
1

lo que funcionó para mí está cambiando de http a ssh:

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

luego verifíquelo con git remote -v

Connor Leech
fuente
1

Tuve el mismo problema. Mi caso fue: había inicializado git repo localmente antes de crearlo en github, luego intenté agregar una rama remota. Resolví mi problema cambiando el orden de las acciones: creé un repositorio en el sitio de github, luego lo inicié localmente. Pero no es el caso de aquellos a quienes les gusta hacer todo desde la línea de comandos como yo.

Yauhen
fuente