Git sigue pidiéndome mi frase de contraseña de clave ssh

538

Creé claves como se indica en el tutorial de github, las registré con github e intenté usar ssh-agent explícitamente; sin embargo, git continúa pidiéndome mi frase de contraseña cada vez que intento hacer un pull o un push.

¿Qué podría ser la causa?

Rogach
fuente

Respuestas:

1039

Una vez que haya iniciado el agente SSH con:

eval $(ssh-agent)
  1. Tienes que agregarle tu clave privada:

    ssh-add
    

    Esto le pedirá su frase de contraseña solo una vez, y luego se le permitirá presionar, siempre que haya cargado la clave pública en Github.

  2. Para guardar la clave permanentemente en macOS:

    ssh-add -K  
    

    Esto persistirá después de cerrarlo y volverlo a abrir almacenándolo en el llavero del usuario.

Roberto Bonvallet
fuente
16
cierre la sesión del servidor, vuelva a ingresar ssh, ejecute git pull, solicite nuevamente la contraseña
cyber8200
35
ssh-add -Kpersistirá después de que lo cierre y lo vuelva a abrir almacenándolo en el llavero del usuario.
Kirk
72
@Kirk ssh-add -Kda lo siguiente:unknown option -- K usage: ssh-add [options] [file ...] Options: -l List fingerprints of all identities. -L List public key parameters of all identities. -k Load only keys and not certificates. -c Require confirmation to sign using identities -t life Set lifetime (in seconds) when adding identities. -d Delete identity. -D Delete all identities. -x Lock agent. -X Unlock agent. -s pkcs11 Add keys from PKCS#11 provider.
Sandeep C
13
Sin embargo, todavía me solicitan una frase de contraseña.
IgorGanapolsky
21
-KEs específico de manzana. Ver help.github.com/articles/…
bkdir
238

Esto me ha sucedido después de reiniciar desde la actualización de OS X El Capitan (10.11) a macOS Sierra (10.12). losssh-add solución funcionó temporalmente pero no persistiría durante otro reinicio.

La solución permanente era editar (o crear) ~/.ssh/configy habilitar la UseKeychainopción.

Host *
    UseKeychain yes

Relacionado: macOS sigue preguntando mi frase de contraseña ssh desde que actualicé a Sierra

Kyle Clegg
fuente
1
funcionó para mí gracias ... Lo había hecho ... ssh-add -K /Users/***/.ssh/git/id_rsapero aún no funcionaba después del reinicio del terminal ... gracias.
nawlbergs
2
¿Quieres saber por qué sucede esto? Lea la nota técnica sobre los cambios de OpenSSH developer.apple.com/library/content/technotes/tn2449/…
samwize
62

Si lo ha intentado ssh-addy aún se le solicita que ingrese su frase de contraseña, intente usar ssh-add -K. Esto agrega tu frase de contraseña a tu llavero.

Actualización: si está utilizando macOS Sierra, es probable que deba realizar otro paso, ya que lo anterior podría dejar de funcionar. Agregue lo siguiente a su ~/.ssh/config:

Host *
  UseKeychain yes
Darryl Young
fuente
2
Todavía me pide una frase de contraseña.
IgorGanapolsky
@IgorGanapolsky ¿Estás usando macOS Sierra? Si es así, mira lo que acabo de agregar a la respuesta. Espero que eso ayude.
Darryl Young
2
Si, estoy en Sierra. Sin embargo, aquí está la línea que funcionó para mí también: AddKeysToAgent sí
IgorGanapolsky
1
Esto también funciona con BitBucket Cloud. Estaba teniendo problemas en GitKraken y esto resolvió mis problemas.
Malaquías
54

Intentaría lo siguiente:

  1. Inicie GitBash
  2. Edita tu ~/.bashrcarchivo
  3. Agregue las siguientes líneas al archivo

SSH_ENV=$HOME/.ssh/environment

# 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
  1. Guarde y cierre el archivo
  2. Cerrar GitBash
  3. Reabrir GitBash
  4. Ingrese su frase de contraseña
Roland
fuente
44
Para referencia futura, esto también funciona con zsh. Solo agregue esto a.zshrc
Arda
2
Creo que esto supone que se llama a su archivo clave id_rsa. Si tiene un nombre personalizado, debe usar, por ejemplo. /usr/bin/ssh-add ~/.ssh/custom_filename
Juha Untinen
2
¿Puedes explicar qué pasa con este script?
LeeR
2
@Lee inicia el ssh-agent si aún no se está ejecutando, que es lo que asegura que no te pida la frase de contraseña ssh en cada inserción (más o menos).
Roland
Esto solo ejecuta ssh-agent y agrega la clave en cada inicio de sesión. Aún debe ingresar la contraseña cada vez que inicie sesión. Entonces, por ejemplo, si tiene scripts que hacen ssh y hacen comandos GIT, desafortunadamente esto no es útil en absoluto.
trainoasis
27

Intente agregar esto a su ~ / .ssh / config :

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

... suponiendo que su clave privada se llame id_rsa

IgorGanapolsky
fuente
11
UseKeychain yes solo es válido para mac
Oz123
3
@ Oz123 cuál es el equivalente para Windows
IgorGanapolsky
@ Oz123 Creo que el equivalente en Windows es AddKeysToAgent, sí, compruebe esta respuesta stackoverflow.com/questions/52423626/…
fedeteka
6

Tuve un problema similar, pero las otras respuestas no solucionaron mi problema. Pensé en seguir adelante y publicar esto en caso de que alguien más tenga una configuración complicada como yo.

Resulta que tenía varias claves y Git estaba usando la incorrecta primero. Me solicitaría mi frase de contraseña, y la ingresaría, luego Git usaría una clave diferente que funcionaría (que no necesitaba ingresar la frase de contraseña).

¡Acabo de eliminar la clave que estaba usando para solicitarme una frase de contraseña y ahora funciona!

11101101b
fuente
5

Parece que puede estar teniendo problemas con el propio agente SSH. Intentaría solucionar eso.

1) ¿Hiciste ssh-add para agregar tu clave a SSH?

2) ¿Está cerrando la ventana del terminal entre usos, porque si cierra la ventana deberá ingresar la contraseña nuevamente cuando la vuelva a abrir?

Jeff Welling
fuente
2
Sería bueno agregar información sobre cómo resolver el primer problema Jeff Welling.
Ranu
5

Si las soluciones anteriores no me funcionan, una cosa que debe verificar es que también tiene la clave pública (normalmente id_rsa.pub). Es inusual no hacerlo, pero esa fue la causa para mí.

Para crear su clave pública a partir de su clave privada:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
Stephen Harris
fuente
1

Intento diferentes soluciones pero nada ayuda. Pero estos pasos ( mi entorno GitBash SSH siempre me pide mi frase de contraseña, ¿qué puedo hacer? ) De las costuras de Bitbucket.com funcionan bien:

La idea es:

  1. creas un ~/.bashrcarchivo

  2. agregar script de seguimiento:

    SSH_ENV=$HOME/.ssh/environment
    
    # 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
    
  3. volver a ejecutar Bash

alx alondra
fuente
1

Otra posible solución que no se menciona anteriormente es verificar su control remoto con el siguiente comando:

git remote -v

Si el control remoto no comienza con git pero comienza con https, es posible que desee cambiarlo a git siguiendo el ejemplo a continuación.

git remote -v // origin is https://github.com/user/myrepo.git
git remote set-url origin [email protected]:user/myrepo.git
git remote -v // check if remote is changed
Darkov
fuente