Git sigue pidiéndome una contraseña


665

He estado usando Git por un tiempo, pero las constantes solicitudes de contraseña están empezando a llevarme a la pared.

Estoy usando Mac OS X y GitHub, y configuré Git y mis claves SSH según las instrucciones de la página Configurar Git de GitHub .

También agregué la clave SSH de github a mi llavero Mac OS X, como se menciona en la página de frases clave de SSH de GitHub . Mi clave pública está registrada con Git.

Sin embargo, cada vez que intento Git pull, tengo que ingresar mi nombre de usuario y contraseña. ¿Hay algo más que una clave SSH que deba configurar para esto?


1
Pregunta tonta, pero ¿has verificado que la clave SSH funciona cuando simplemente usas ssh en la máquina con git?
Kurt Stutsman

44
¿Te refieres a algo como ssh -T git@github.com? Sí, eso funciona bien (aunque un poco lento).
Catherine


Para https url, puede usar (con git1.8.3 +) un git credential helper ' netrc'. Vea un ejemplo completo aquí .
VonC

Soy un usuario de Windows, y también estaba enfrentando un problema de solicitud de contraseña incluso después de agregar mi clave pública al archivo autorizado del servidor. Lo que realmente fue el problema fue que no estaba manteniendo mis claves públicas / privadas en la carpeta .ssh de la carpeta c: \ program files \ git. Si alguien se enfrenta a este problema, copie sus claves en esta carpeta e intente presionar / tirar.
Raja Amer Khan

Respuestas:


797

Creo que puede tener la URL de repositorio Git incorrecta.

Abra .git/configy busque la sección ["origen" remoto]. Asegúrese de estar usando el SSH:

ssh://git@github.com/username/repo.git

Puede ver la URL SSH en la página principal de su repositorio si hace clic en Clonar o descarga y elige ssh .

Y NO el https o gituno:

https://github.com/username/repo.git
git://github.com/username/repo.git

Ahora puede validar solo con la clave SSH en lugar del nombre de usuario y la contraseña.

Si Git se queja de eso 'origin' has already been added, abra el.config archivo y edite la url = "..."parte después [remote origin]comourl = ssh://github/username/repo.git


Lo mismo aplica para otros servicios. Asegúrese de que la dirección se vea así:protocol://something@url

Por ejemplo, .git/configpara Azure DevOps:

[remote "origin"]
    url = https://mystore@dev.azure.com/mystore/myproject/
    fetch = +refs/heads/*:refs/remotes/origin/*

44
Esto puede ser. Cuando llamo a git remote -v obtengo: origin github.com/Foo/Bar.git (fetch) origin github.com/Foo/Bar.git (push) mientras que para trabajar con SSH parece que debería ser: origin git @ github.com: Foo / Bar.git (buscar) origen git@github.com: Foo / Bar.git (push) Esto puede deberse a que originalmente verifiqué mi proyecto usando la aplicación Mac de GitHub ( mac.github.com ). ¿Alguna idea de cómo puedo solucionarlo?
Catherine

8
Arregle la url en el archivo .git / config, use git-remote para arreglarlo, o elimine su repositorio local y clónelo nuevamente con la URL correcta.
static_rtti

9191
Solo para explicar esto (como lo necesitaba): abra .git / config y en el [remote "origin"]conjunto de secciones url = ssh://git@github.com/username/Repo.git. Eso funcionó para mí.
Greg K

13
Extraño, la solución de @ GregK no funcionó para mí, pero url = git@github.com:organization/Repo.gitfuncionó. ¡+1 por guiarme por el camino correcto! ¡Éxito!
jmort253

3
No puedo enfatizar lo suficiente lo importante que es CLONAR usando ssh: // git @ github / [username] / [reponame] .git si quieres usar una clave para acceder a GIT no tienes que escribir tu nombre de usuario y contraseña cada vez . Encontré que la única forma de solucionarlo era eliminar el repositorio local y clonar nuevamente $ git clone ssh: // git @ github / [username] / [reponame] .git
Gene Myers

555

Configurar credential.helper

En OS X (ahora macOS), ejecute esto en Terminal :

git config --global credential.helper osxkeychain

Le permite a Git usar el archivo Keychain.app para almacenar nombre de usuario y contraseña y recuperar la frase de contraseña a su clave SSH privada del llavero.

Para uso de Windows:

git config --global credential.helper wincred

Solución de problemas

Si el asistente de credenciales de Git está configurado correctamente, macOS guarda la frase de contraseña en el llavero. A veces, la conexión entre SSH y las frases de contraseña almacenadas en el llavero puede romperse. Correr ssh-add -Kossh-add ~/.ssh/id_rsa para agregar la clave al llavero nuevamente.

macOS v10.12 (Sierra) cambia a ssh

Para macOS v10.12 (Sierra), ssh-add -Kdebe ejecutarse después de cada reinicio. Para evitar esto, cree ~/.ssh/configcon este contenido.

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

Desde la ssh_config manpágina del 10.12.2:

UseKeychain

En macOS, especifica si el sistema debe buscar frases de contraseña en el llavero del usuario cuando intenta usar una clave en particular. Cuando el usuario proporciona la frase de contraseña, esta opción también especifica si la frase de contraseña debe almacenarse en el llavero una vez que se haya verificado que es correcta. El argumento debe ser "sí" o "no". El valor predeterminado es 'no'.

Apple ha agregado Technote 2449 que explica lo que sucedió.

Antes de macOS Sierra, sshpresentaría un cuadro de diálogo solicitando su frase de contraseña y ofrecería la opción de almacenarla en el llavero. Esta interfaz de usuario quedó en desuso hace algún tiempo y se ha eliminado.


30
Esta es, con mucho, la mejor manera de hacerlo, ya que la aplicación Github para OSX (tal vez también Windows) usa la ruta https para repositorios git de forma predeterminada. También hay una buena razón para usar https en lugar de ssh / git, ya que muchas redes corporativas solo permiten el tráfico en los puertos 80 y 443 por razones de seguridad.
codehugger

2
Necesitas git 1.7.10 o más reciente para usar el asistente de credenciales.
jbandi

3
+1 para la solución keychain.app. Esto es GENIAL para mí porque el servidor git de mi empleador solo admite http servido a través de apache y desaconsejan firmemente el uso del .netrcmétodo de archivo que pone su contraseña en texto sin formato.
Josh

3
Tenga en cuenta que recibí el error 'credential-osxkeychain' is not a git command.porque no tenía instalado el credencial auxiliar. Seguí las instrucciones aquí para instalarlo: help.github.com/articles/set-up-git#password-caching
Hugh

2
Gracias por la actualización de Sierra, acabo de actualizar y no pude entender por qué github seguía pidiendo pw cuando agregué git config --global credential.helper osxkeychainEl archivo de configuración en mi .sshdirectorio me arregló.
pixel 67

139

Esto me sucedió cuando actualicé a macOS v10.12 (Sierra). Parece que el agente SSH se despejó al actualizar.

$ ssh-add -L
The agent has no identities.

Simplemente ejecutando ssh-addmi identidad existente. Ingresé la contraseña y estaba listo para volver.


99
+1 roto por la actualización de Sierra. Tenga en cuenta que la contraseña es la contraseña de su clave SSH y no su contraseña de usuario de Mac.
mbonness

1
Hacer ssh-add funciona pero parece que se restablece cerrando la ventana Terminal. Tal vez esta es una nueva "característica".
joshd

Atención: esto sucedió nuevamente con otra actualización de Sierra (10.12.2) pero se aplica la misma solución.
Brian

¿Alguien sabe cómo hacer que esto no se restablezca después de cerrar la Terminal?
nickjwallin

1
Acababa de actualizar mi macbook pro a 10.12.2 y me rompió el git. Usar ssh-add funcionó totalmente para mí. Gracias @amcc!
jimmyplaysdrums

68

Use esto: reemplace github.com con el nombre de host apropiado

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

Ya tengo ese conjunto cuando lo veo git remote -v. Sin embargo, todavía se me solicita la contraseña.
IgorGanapolsky

Igual, configuré lo que él sugirió, pero aún recibo una solicitud de contraseña, ¿cómo puedo evitar eso?
cyber8200

@IgorGanapolsky: ¿Alguna vez encontraste una solución para ti?
cyber8200

1
Esto funciona correctamente Esto es extraño que la URL remota con git@**no solicite credenciales y la URL con https@**sí :). Así encontré este documento .
Sujit Kumar Singh

54

Como han dicho otros, puede instalar una contraseña de caché auxiliar. Principalmente solo quería publicar el enlace para otras plataformas, y no solo para Mac. Estoy ejecutando un servidor Linux y esto fue útil: almacenamiento en caché de su contraseña de GitHub en Git

Para Mac:

git credential-osxkeychain

Ventanas:

git config --global credential.helper wincred

Linux:

git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)

55
Tuve que desplazarme hacia la tercera respuesta para ver las instrucciones de Linux, estas deberían estar en la respuesta principal, ya que es un problema comúnmente mencionado.
KoldBane

22

También busque quién le está pidiendo la frase de contraseña. ¿Es Git o tu agente de SSH?

En mi caso, cada vez que git pulllo hacía me preguntaba:

Enter passphrase for key '/work/username/.ssh/id_rsa':

Así que supuse que era Git pidiendo una frase de contraseña. Así que seguí buscando soluciones, solo para darme cuenta más tarde de que mi agente SSH había cerrado. Que se puede solucionar usando eval $(ssh-agent)y ssh-addcomo se indica aquí.

También estoy pegando un pequeño fragmento que puedes agregar a tu ~/.bashrc archivo (o el equivalente) para asegurarse de que su agente SSH se inicie en su inicio de sesión.

En cualquier caso, este fue un error bastante tonto que cometí, pero publicarlo aquí, en caso de que ayude a alguien a ahorrar tiempo de ladrar al árbol equivocado, como lo hice yo.

# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
    echo succeeded
    chmod 600 ${SSH_ENV}
    . ${SSH_ENV} > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi


Estoy bastante seguro de que falta una línea en el código anterior, según stackoverflow.com/a/18915067/277023 , debe tenerloSSH_ENV="$HOME/.ssh/environment"
kellyfj

20
git config credential.helper store

Nota: Si bien esto es conveniente, Git almacenará sus credenciales en texto sin cifrar en un archivo local (.git-credentials) en el directorio de su proyecto (consulte a continuación el directorio "home"). Si no le gusta esto, elimine este archivo y cambie a usar la opción de caché.

Si desea que Git continúe pidiéndole credenciales cada vez que necesite conectarse al repositorio remoto, puede ejecutar este comando:

git config --unset credential.helper

Para almacenar las contraseñas en credenciales .git en su directorio% HOME% en lugar del directorio del proyecto: use el indicador --global

git config --global credential.helper store

9

Guía de Git en Windows y GitHub usando SSH para empujar / tirar: una guía ilustrada de Git en Windows

  1. Descargue e instale PuTTY
  2. Establezca la variable de entorno 'GIT_SSH' = 'ruta \ a \ plink.exe' (en la carpeta de masilla instalada) - ¡ muy importante !
  3. Reinicie Windows Explorer para que las variables de entorno surtan efecto (no solo puede reiniciar el símbolo del sistema)
  4. Ejecute puttygen.exe para generar una nueva clave, copie la clave pública en el sitio de GitHub
  5. Guarde esta nueva clave privada en un lugar seguro en el disco (preferiblemente no Dropbox )
  6. Ejecute putty.exe y conecte SSH a github.co
  7. Acceda rápidamente a la carpeta de inicio ejecutando "shell: startup".
  8. Inicie su clave privada con Windows a través del concurso. Cree un acceso directo en la carpeta de Inicio con la sintaxis "ruta \ a \ pageant.exe" "ruta \ a \ privatekey"
  9. No necesitamos establecer la configuración 'puttykeyfile' dentro de .git / config de nuestros repositorios
  10. Muy importante es que se use la "URL de clonación SSH" de GitHub y no HTTPS.

Ya nadie debería usar masilla. Ahora puede hacer todo con las utilidades integradas de Windows 10. Deje masilla, solo sea masilla.
Ian Smith

9

En Windows para Git 1.7.9+, ejecute el siguiente comando en el símbolo del sistema para abrir el archivo de configuración en un editor de texto:

    git config --global --edit

Luego, en el archivo, agregue el siguiente bloque si no está presente o edítelo en consecuencia:

    [credential "https://giturl.com"]
        username = <user id>
         helper = wincred

Guarde y cierre el archivo. Deberá proporcionar las credenciales solo una vez después del cambio anterior.


esto funciona perfecto, me salvaste las horas, ahora puedo concentrarme en mi trabajo, muchas gracias hermano.
Mohammed Sufian

9

Use el siguiente comando para aumentar el tiempo de espera para poder volver a escribir la contraseña por un tiempo

git config --global credential.helper 'cache --timeout 3600'

Lo usé para Bitbucket y GitHub, funciona para ambos. Lo único que debes hacer 3600es en segundos. Aumenta todo lo que quieras. Lo cambié a 259200unos 30 días. De esta manera, vuelvo a ingresar mi contraseña cada 30 días aproximadamente.


1
Ok, descubrí que esto no persiste después de un reinicio, por lo que aún debe ingresar la contraseña después de un reinicio, independientemente del tiempo de espera ...
Ben Winding

Esta es una buena manera de hacer en caché :) Al menos me ahorró tiempo. Gracias
ChikuMiku

@BenWinding porque almacena credenciales en la memoria.
z3dd

5

Supongo que resolvió su problema, pero no veo la solución aquí que me ayudó, así que aquí está.

Escriba en la terminal:

echo "" > ~/.ssh/known_hosts

Eso vaciará su known_hostsarchivo, y tendrá que agregar todos los hosts que utilizó y con los que se conectó, pero resolvió el problema.


1
cat /dev/null > ~/.ssh/known_hostsHará lo mismo.
The Tin Man

55
> ~/.ssh/known_hostses aún más corto :)
Collin Allen

rm ~ / .ssh / known_hosts también debería hacer el trabajo. Sin embargo, aconsejaría en contra de esto.
Orkoden

3
Si necesita eliminar un host de ~ / .ssh / known_hosts, hay una forma menos impactante que borrar el archivo. ~ / .ssh / known_hosts es solo un archivo de texto y si puede encontrar los hosts infractores en el archivo, simplemente puede eliminar sus líneas. Es posible que desee hacer una copia de seguridad del archivo antes de editarlo. Si solo tiene unas pocas entradas en el archivo, eliminarlo podría no ser una mala idea. Trabajo en muchos servidores, por lo que mi ~ / .ssh / known_hosts tiene cientos de entradas y no estoy listo para eliminarlos para eliminar algunas entradas.
Tim Stewart

3
@papan ¡Esto no impide que git me pida mi contraseña!
IgorGanapolsky

5

Siento que la respuesta proporcionada por static_rtti es hacky en algún sentido. No sé si esto estaba disponible antes, pero las herramientas de Git ahora proporcionan almacenamiento de credenciales.

Modo de caché

$ git config --global credential.helper cache

Utilice el modo "caché" para mantener las credenciales en la memoria durante un cierto período de tiempo. Ninguna de las contraseñas se almacena en el disco y se eliminan de la memoria caché después de 15 minutos.

Modo de tienda

$ git config --global credential.helper 'store --file ~/.my-credentials'

Utilice el modo "almacenar" para guardar las credenciales en un archivo de texto sin formato en el disco y nunca caducarán.

Yo personalmente usé el modo de tienda . Eliminé mi repositorio, lo cloné y luego tuve que ingresar mis credenciales una vez.

Referencia: 7.14 Herramientas Git - Almacenamiento de credenciales


Para Windows credential.helper cacheNO funciona. Debería ser git config --global credential.helper wincred.
Paulo Merson

Almacenarlo funcionó y ahora me permite confirmar mis cambios sin solicitar una contraseña todo el tiempo, ¡es un salvavidas!
g4ost

En Linux, esto hizo el trabajo por mí git config --local credential.helper store. En mi caso, superé HTTPS, de esta manera solo escribo nombre de usuario / contraseña una vez y después de eso, mis credenciales se reutilizan de ~ / .git-credentials
CCarlos

3

La respuesta de orkoden sobre el uso del llavero con Git en su terminal fue incompleta y genera errores. Esto es lo que debe hacer para guardar el nombre de usuario y la contraseña que ingresa en el terminal en su llavero:

curl http://github-media-downloads.s3.amazonaws.com/osx/git-credential-osxkeychain -o git-credential-osxkeychain
sudo mv git-credential-osxkeychain /usr/local/bin
sudo chmod u+x /usr/local/bin/git-credential-osxkeychain

Luego ingrese

git config --global credential.helper osxkeychain

Si ya ha realizado la parte con la configuración de Git antes del material curl, no hay problema; Funcionará.


1
¿Qué pasa si estoy en Linux?
IgorGanapolsky

3

Como static_rtti dijo anteriormente, cambie

https://github.com/username/repo.git
git://github.com/username/repo.git

a

ssh://git@github.com/username/repo.git

Yo mismo cambié el httpsarchivo .git / config a ssh, pero todavía no funcionaba. Entonces vi que debes cambiar github.comagit@github.com . Una buena manera de obtener la URL correcta real es ir a la página de su proyecto y hacer clic en esto:

Cambie HTTPS a SSH para obtener la URL correcta

Luego agregue esta URL al archivo de configuración.


Ya tengo eso en mi archivo de configuración ¿Qué más debo verificar?
cyber8200

¿Lo cambiaste también en github.com?
CheesusCrust

3

En el Subsistema de Windows para Linux (WSL), esta fue la única solución que encontré que funcionaba:

eval `ssh-agent` ; ssh-add ~/.ssh/id_rsa

Era un problema con el agente ssh no registrado correctamente en WSL.


Ha sido un whlie, pero esto es lo que solucionó mi problema.
Nam Kim

3

Si quiere evitar que Git le pida siempre las credenciales de inicio de sesión de su repositorio de GitHub, puede hacerlo fácilmente.

Usando SSH en lugar de HTTPS

Puede actualizar el origen remoto utilizando SSH en lugar de HTTPS "

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

Configure Git para almacenar su contraseña y nombre de usuario

Así es como puede hacer que Git almacene el nombre de usuario y la contraseña:

git config --global credential.helper store

A continuación, guarde el nombre de usuario y la contraseña para una sesión:

git config --global credential.helper cache

2

Estoy de acuerdo con "codehugger" y usando las instrucciones de "orkoden" funcionó para mí - en NetBeans 7.3 - cuando haces clic derecho en el archivo y seleccionas el menú contextual - presiona - se abrió una ventana de 'empujar al control remoto' - hay dos opciones aquí:

  1. origin:https://github.com/myaccount/myproject.git/

  2. https://github.com/myaccount/myproject.git/

Como puede ver, la diferencia es el parámetro de origen en la URL: no desea elegir esta opción (1), desea marcar la opción (2), y eso funciona bien para mí.


2

Paso 1: verifique su configuración actual

cat .git/config

Conseguirás:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/path_to_your_git.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[user]
    name = your_username
    email = your_email
[branch "master-staging"]
    remote = origin
    merge = refs/heads/master-staging

Paso 2: elimina tu origen remoto

git remote rm origin

Paso 3: agregue el origen remoto de nuevo con su nombre de usuario y contraseña

git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git

Después de haber agregado el origen remoto nuevamente, también debe alinear sus sucursales remotas y locales, algo como esto: git branch --set-upstream master origin/master
Richard Bown

2

Si Git le solicita un nombre de usuario y una contraseña cada vez que intenta interactuar con GitHub, probablemente esté utilizando la URL de clonación HTTPS para su repositorio.

El uso de una URL remota HTTPS tiene algunas ventajas: es más fácil de configurar que SSH, y generalmente funciona a través de servidores de seguridad y servidores proxy estrictos. Sin embargo, también le solicita que ingrese sus credenciales de GitHub cada vez que extrae o empuja un repositorio.

Puede configurar Git para almacenar su contraseña por usted. Para Windows :

git config --global credential.helper wincred

2

Al ejecutar macOS Cataline 10.15, el método de almacenamiento en caché de llavero no funcionaba para mí. Y quería utilizar https://nossh

Esto es lo que funcionó para mí:

git remote rm origin

git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git

Esto también debería funcionar en GitLab

Asegúrese de que si el nombre de usuario contiene una dirección de correo electrónico, para eliminar la @emailparte o obtendrá un error que indica URL using bad/illegal format or missing URL.

¡Espero que esto ayude!


1
Esta es la ÚNICA solución que funcionó para mí. your_git_username fue crítico. En realidad no era necesario poner: su_contraseña_git. En este punto, aunque todavía solicitaba una "frase de contraseña", ahora aceptaría la contraseña de la cuenta.
kbulgrien

1

Existen diferentes tipos de autenticaciones según su configuración. Aquí hay algunos:

  1. git credential-osxkeychain.

    Si su credencial no es válida, elimínela:

      git credential-osxkeychain erase
    

    o:

      printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase
    

    Entonces Git no te pedirá el permiso del llavero nuevamente. Luego configúrelo nuevamente.

    Ver: Actualización de credenciales del llavero OS X en GitHub

  2. Su clave SSH RSA.

    Para esto, debe comparar su clave SSH con lo que ha agregado, verifique ssh-add -L/ ssh-add -lsi está utilizando la identidad correcta.

  3. Su autenticación HTTPS (si está usando en httpslugar dessh protocolo).

    Use ~/.netrc( %HOME%/_netrcen Windows) para proporcionar sus credenciales, p. Ej.

      machine stash1.mycompany.com
      login myusername
      password mypassword
    

Más información: Sincronización con GitHub en Stack Overflow.





0

Solución Microsoft Stack (Windows y Azure DevOps)

Primero abra el .git/configarchivo para asegurarse de que la dirección se vea así:

protocol://something@url

Por ejemplo .git / config para Azure DevOps:

[remote "origin"]
    url = https://mystore@dev.azure.com/mystore/myproject/
    fetch = +refs/heads/*:refs/remotes/origin/*

Si el problema persiste, abra Windows Credential Manager , haga clic en la caja fuerte llamada Windows Credentials y elimine todas las credenciales relacionadas con git.

Ahora, la próxima vez que inicies sesión en git, ya no desaparecerá.


0

Si tiene configurado el agente SSH, también puede agregarlo a su ~/.gitconfigpara forzar a git a usar SSH para todos los repositorios de GitHub en lugar de HTTPS:

[url "ssh://git@github.com/"]
    insteadOf = git://github.com/
    insteadOf = https://github.com/

(Si trabaja principalmente con repositorios públicos, también puede usarlos en pushInsteadOflugar de hacerlo insteadOf, ya que la lectura de un repositorio público puede realizarse sin autenticación).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.