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?


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.


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


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

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

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



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!


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?


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

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


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 git@github.com:user/myrepo.git
git remote -v // check if remote is changed
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.