La autenticación de Git falla después de habilitar 2FA

97

Acabo de habilitar 2FA (no puedo pensar en ningún otro cambio que hice) y git me pidió mi nombre de usuario y contraseña. Proporcioné ambos, pero estaban "mal". Probé muchas de las soluciones aquí: Git push requiere nombre de usuario y contraseña, pero eso no funcionó. En particular, al cambiar de https a ssh, la clave ssh da

Permiso denegado (clave pública). fatal: no se pudo leer desde el repositorio remoto.

$ git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Username for 'https://github.com': **********
Password for 'https://[email protected]': 
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/mlbileschi/scala.git/'

¿Algun consejo?

Max Bileschi
fuente
1
"Permiso denegado (clave pública). Fatal: No se pudo leer desde el repositorio remoto". es un problema independiente que se puede resolver configurando una clave SSH para su cuenta: help.github.com/articles/…
Ajedi32
1
A menudo, esto no es un problema de 2FA, sino que se resuelve cambiando de https a git
SCBuergel.eth

Respuestas:

125

Necesita generar un token de acceso. Puede crear uno yendo a su página de configuración .

enter image description here

Utilice este token de acceso como contraseña en la línea de comandos.

Gergo Erdosi
fuente
hm, lo intenté después de establecer la url en https, y no funcionó. También probé set-url de nuevo a ssh y eliminé la entrada .ssh / known_hosts, pero fue en vano.
Max Bileschi
¿Puede agregar la salida de la línea de comando a su pregunta? Incluidos los comandos que está ejecutando.
Gergo Erdosi
La salida fue agregada
Max Bileschi
Tuve un problema extraño en el que tuve que comenzar un clon e ingresar mi nuevo token de acceso. Después de esto (sin siquiera esperar a que finalice la clonación) pude dar mi nuevo token de acceso a mi directorio original en el que estaba intentando ejecutar git pull. Probablemente un problema local, pero esto podría ayudar a alguien.
sg
Recibo The requested URL returned error: 403cuando uso el token como contraseña, para presionar https
stelios
38

Una solución de extremo a extremo consta de 3 pasos.

  1. Felicitaciones a Gergo Erdosi. Su respuesta es en gran parte correcta, es solo que Github cambia esa página de configuración. A finales de 2016, debe generar un token de acceso desde su página de tokens de acceso personal .

    ingrese la descripción de la imagen aquí

    Utilice este token de acceso como contraseña en la línea de comandos.

  2. Puede conservar su nombre de usuario incluyéndolo en la URL remota de su proyecto. Una de las formas de hacerlo es editar su .git/configpara modificar la urllínea en el siguiente formato:

    url = https://[email protected]/owner/repo.git

  3. Puede conservar su contraseña ejecutando esto solo una vez:

    $ git config credential.helper store

    y luego su (s) futura (s) contraseña (s) de git se almacenarán en ~ / .git-credentials, en texto sin formato, usando el formato https://user:[email protected].

    El almacenamiento de la (s) contraseña (s) en texto plano normalmente se consideraría un riesgo de seguridad. Pero en este caso de 2FA, la credencial NO es su contraseña real, es una cadena generada aleatoriamente. Por lo tanto, es tan seguro como usar una clave privada ssh y una clave privada ssh sin frase de contraseña. AVISO: tenga en cuenta que, si también usa otra (s) cuenta (s) de git sin 2FA en esta máquina, esas contraseñas reales también se almacenarán en texto sin formato.

PD: Alternativamente, puede optar por usar el inicio de sesión basado en ssh, usando una clave privada ssh protegida por frase de contraseña, que sería más segura y menos conveniente, pero está fuera del alcance de esta respuesta.

RayLuo
fuente
1
esto funcionó para mí y me permitió no tener que escribir un y pw cada vez que interactúo con git. uso Windows con cygwin y nunca pude hacer funcionar las claves ssh, ¡esto sí!
liltitus27
sobre el último párrafo: ...the credential is NOT your real password, it is a randomly generated string. So it is as secure as using ssh private key.- no es cierto en absoluto . Las claves SSH se pueden proteger fácilmente con una frase de contraseña lista para usar . Sencillo ~./git-credentials- ¡no está asegurado en absoluto!
maxkoryukov
Además, esta CLAVE de API almacenada en un archivo de texto sin formato permite: acceder a la API de GitHub (depende del alcance, pero probablemente, todos los que tengan apikey tendrán acceso al código fuente del repositorio) y realizar cualquier operación de git (empujar, tirar). En otras palabras, dicho archivo de texto sin formato es un regalo increíble, especialmente, si tiene acceso a repositorios privados (probablemente, se harán públicos muy pronto)
maxkoryukov
@maxkoryukov Bien, ¿qué tal si reformulo la última oración como "tan segura como usar una clave privada ssh sin frase de contraseña"? Porque el objetivo del paso 3 es intentar omitir la solicitud de contraseña (asumiendo que está trabajando en su propia computadora, por supuesto). En tal caso, si alguien logra hacerse con sus credenciales ~ / .git O su clave privada ssh sin frase de contraseña, la consecuencia sería la misma. Estoy de acuerdo con usted en que una clave ssh protegida por frase de contraseña sería más segura (y menos conveniente).
RayLuo
@RayLuo, LGFM;)
maxkoryukov
16

Tuve un problema similar. Tuve que modificar la URL utilizada en el comando git para incluir mi nombre de usuario.

git push https://[email protected]/mlbileschi/scala.git

Luego, cuando solicite PW, use el token de acceso que creó siguiendo las instrucciones en la respuesta de Gergo Erdosi.

Bufón
fuente
1
esto funciona para mí, pero si trato de establecer git remote set-url --push origincon el mismo valor, git push origin masteraún falla.
Danimal
También me funciona después de incluir mi nombre de usuario en la ruta remota como lo describe Jester.
ovo
Esto no funcionó para mí en el símbolo del sistema de Windows, pero el interior git-bashfuncionó bien, sin embargo
Vincent Tang
Funcionó perfectamente para mí en Ubuntu. ¡Gracias!
Ryan Russell
12

En Linux, puede autenticar su identidad de GitHub mediante una clave SSH.

1) Generando una nueva clave SSH ( fuente )

Terminal abierto.

Pegue el texto a continuación, sustituyéndolo por su dirección de correo electrónico de GitHub.

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

Esto crea una nueva clave ssh, utilizando el correo electrónico proporcionado como etiqueta.


2) Vincular la clave a su cuenta de GitHub

Abra el terminal y copie la clave pública generada

cat ~/.ssh/id_rsa.pub

Debería generar algo como

ssh-rsa AAAAB3NzaC1y ... mKAKw== [email protected]

Navegue a https://github.com/settings/keys y haga clic en New SSH Key, asígnele un título y copie y pegue la clave pública.

ingrese la descripción de la imagen aquí


3) Cambiar el origen de git de https://assh

Abra la terminal, cda la ubicación de su repositorio y escriba

git remote set-url origin [email protected]:<github username>/<repository name>
Jossef Harush
fuente
1
Cierto, pero irrelevante con la pregunta. La autenticación a través de a httpsveces es útil, por ejemplo, cuando se mantiene upstream over httpsmientras tiene su fork over ssh, para evitar presionar accidentalmente upstream, ya que httpsle pedirá la contraseña y le recordará que apuntó al repositorio incorrecto
stelios
No necesita linux para usar SSH. El uso de SSH es la mejor respuesta para Windows también, creo. La herramienta comúnmente utilizada para Windows es Pagaent y Putty
Andrew
3

Esto funcionó para mí:

  • Vaya a [your-git-repo] /. Git / config

  • En [remote "origin"]Cambiar la URLclave del protocolo http a git.

Ejemplo

Si el valor de urles https://github.com/ .git cámbielo a[email protected]:<repo-url>.git

imsinu9
fuente
3

Si ya está utilizando claves ssh, después de habilitar 2FA, le obligará a leer / escribir de forma remota con SSH. Realmente no necesita agregar tokens personales, sino seguir usando su par de claves SSH existente.

Simplemente cambie su URL remota de HTTPS a SSH:

git remote set-url origin [email protected]:<github-username>/<repo-name>
Sakhi Mansoor
fuente
0

Estaba enfrentando este problema en un repositorio existente cuando habilité 2FA (autenticación de dos factores) para uno de mis repositorios privados. Pude resolverlo siguiendo los pasos a continuación en mi terminal ubuntu 19.0: -

  1. Agregue su clave ssh a github para que no necesite usar su contraseña nuevamente, ya que ahora ha habilitado 2FA. Visita la página de github para saber cómo hacerlo fácilmente.
  2. Una vez que se agrega la clave, vaya a su terminal y actualice la URL de origen

    git remote set-url origin [email protected]:<USERNAME>/<BRANCH-NAME>

Eso es todo, espero que ayude

Milind
fuente