¿Por qué git no puede recordar mi frase de contraseña en Windows?

144

Acabo de comenzar a usar git y no puedo recordar mi frase de contraseña. Estoy usando cmd.exe elevado y mi host de git es github y he creado una clave ssh como esa guía en github

pero sigo teniendo

*\subnus.mvc>git push origin master
Enter passphrase for key '/c/Users/Subnus/.ssh/id_rsa':
Nesizer
fuente
No he usado msysgit, pero el agente de autenticación de concurso puede ser útil.
Cebjyre
1
Intenté todo y luego encontré esto que funcionó.
Blake Niemyjski
1
Windows 10 viene con OpenSSH desde hace algún tiempo. Habilite el servicio ssh-agent, use ssh-add para agregar su clave al almacén ssh y configúrelo GIT_SSHen su entorno (si es necesario) y git / ssh recordará su frase de contraseña a través de ssh-agent. Vea mi respuesta a continuación para obtener instrucciones más detalladas.
d3r3kk
1
2019, acaba de instalar git en Windows 10 y git solicita la contraseña una vez y la recuerda.
Jean-François Fabre
@ Jean-FrançoisFabre Puede que no estés usando OpenSSL.
RoadRunner

Respuestas:

206

Me doy cuenta de que esta pregunta viene hace dos años, pero tuve el mismo problema y varias respuestas aquí no respondieron completamente la pregunta para mí. Aquí hay dos soluciones paso a paso, dependiendo de si usa TortoiseGit además de msysgit o no.

Primera solución Asume Windows, msysgit y PuTTY.

  1. Instale msysgit y PuTTY como se indica.
  2. (Opcional) Agregue PuTTY a su ruta. (Si no hace esto, las referencias a los comandos PuTTY a continuación deben tener el prefijo con la ruta completa al ejecutable apropiado).
  3. Si aún no lo ha hecho, genere un hash de clave como se indica en GitHub o según lo indique su host Git.
  4. Nuevamente, si aún no lo ha hecho, convierta su clave para usar con pageant.exe de PuTTY usando puttygen.exe . Las instrucciones se encuentran en la documentación de PuTTY, en esta útil guía y en otros lugares del ciberespacio.
  5. Ejecute pageant.exe de PuTTY , abra su archivo .ppk ("Agregar clave") y proporcione su frase de contraseña para su clave.
  6. Acceda al cuadro de diálogo de variables de entorno de Windows (haga clic con el botón derecho en "Equipo", haga clic en "Propiedades", haga clic en "Configuración avanzada del sistema" o en la pestaña "Avanzado", haga clic en "Variables de entorno"). Agregue la siguiente variable de entorno:

    GIT_SSH = C: \ full \ path \ to \ plink.exe

    Reemplace "C: \ full \ path \ to" con la ruta de instalación completa a PuTTY, donde se encuentra plink.exe. Probablemente sea mejor agregarlo a la sección "Variables de usuario". Además, asegúrese de que la ruta que usa para plink.exe coincida con la ruta que usa para Pageant (pageant.exe). En algunos casos, puede tener varias instalaciones de PuTTY porque podría instalarse junto con otras aplicaciones. Usar plink.exe de una instalación y pageant.exe de otra probablemente le causará problemas.

  7. Abra un símbolo del sistema.

  8. Si está intentando conectarse a un repositorio git alojado en Github.com, ejecute el siguiente comando:

    plink.exe [email protected]

    Si el repositorio de git al que está intentando conectarse está alojado en otro lugar, reemplace [email protected] con un nombre de usuario y URL apropiados. (Asumiendo Github) Debería ser informado de que la clave de host del servidor no está almacenada en caché, y preguntarle si confía en ella. Responde con una y . Esto agregará la clave de host del servidor a la lista de hosts conocidos de PuTTY. Sin este paso, los comandos git no funcionarán correctamente. Después de presionar enter, Github le informa que Github no proporciona acceso de shell. Eso está bien ... no lo necesitamos. (Si se está conectando a algún otro host y le da acceso a shell, probablemente sea mejor terminar el enlace sin hacer nada más).

  9. ¡Todo listo! Los comandos Git ahora deberían funcionar desde la línea de comandos. Es posible que desee que pageant.exe cargue su archivo .ppk automáticamente en el momento del arranque , dependiendo de la frecuencia con la que lo necesite.

Segunda solución Asume Windows, msysgit y TortoiseGit.

TortoiseGit viene con archivos ejecutables PuTTY y una versión especialmente modificada de plink (llamada TortoisePlink.exe) que facilitará las cosas.

  1. Instale msysgit y TortoiseGit como se indica.
  2. Si aún no lo ha hecho, genere un hash de clave como se indica en GitHub o según lo indique su host Git.
  3. Nuevamente, si aún no lo ha hecho, convierta su clave para usar con pageant.exe de TortoiseGit usando puttygen.exe de TortoiseGit . Las instrucciones se encuentran en la documentación de PuTTY, en la guía útil vinculada a la primera solución y en varios otros lugares del ciberespacio.
  4. Ejecute el pageant.exe de TortoiseGit , abra su archivo .ppk ("Agregar clave") y proporcione su frase de contraseña para su clave.
  5. Acceda al cuadro de diálogo de variables de entorno de Windows (haga clic con el botón derecho en "Equipo", haga clic en "Propiedades", haga clic en "Configuración avanzada del sistema" o en la pestaña "Avanzado", haga clic en "Variables de entorno"). Agregue la siguiente variable de entorno:

    GIT_SSH = C: \ full \ path \ to \ TortoisePlink.exe

    Reemplace "C: \ full \ path \ to" con la ruta de instalación completa de TortoiseGit, donde se encuentra TortoisePlink.exe. Probablemente sea mejor agregarlo a la sección "Variables de usuario". Además, asegúrese de que la ruta que usa para TortoisePlink.exe coincida con la ruta que usa para Pageant (pageant.exe). En algunos casos, puede tener varias instalaciones de PuTTY porque podría instalarse junto con otras aplicaciones. Usar TortoisePlink.exe de la instalación de TortoiseGit y pageant.exe de otra instalación de una aplicación diferente (o de una instalación independiente de PuTTY) probablemente le causará problemas.

  6. ¡Todo listo! Los comandos Git ahora deberían funcionar desde la línea de comandos. La primera vez que intente conectarse a su repositorio git, probablemente se le informará que la clave de host del servidor no está en caché y le preguntará si confía en el servidor. Haga clic en "Sí". (Esto es TortoisePlink.exe en acción).

    Es posible que desee que pageant.exe cargue su archivo .ppk automáticamente en el momento del arranque , dependiendo de la frecuencia con la que lo necesite.

Tercera solución Asume Ventana, msysgit y símbolo del sistema nativo.

  1. Instalar msysgit
  2. Asegúrese de permitir que git se use en el símbolo del sistema de MS-DOS
  3. correr start-ssh-agent
  4. Ingrese frases de contraseña SSH
  5. ¡Todo listo! Los comandos Git ahora deberían funcionar en el símbolo del sistema nativo.
Matt Clarkson
fuente
3
Si tiene GitExtensions y TortoiseGit, cada uno de los cuales tiene su propia versión de masilla, asegúrese de establecer la variable de entorno GIT_SSH en la ruta del plink para el concurso que está utilizando.
shovavnik
15
En caso de que alguien más se encuentre con este estúpido error: asegúrese de estar usando el formato de URL remota SSH (git @ host: accountname / reponame.git) no la URL HTTPS; de lo contrario, seguirá pidiendo esa contraseña ...
desde el
Cuando ejecuto plink.exe [email protected], aparece "ERROR FATAL: El servidor cerró inesperadamente la conexión de red"
Brett
44
Nota: el método tres se ha incorporado a msysgit para que pueda escribir start-ssh-agentla línea de comando para guardar su frase de contraseña SSH.
Matt Clarkson
66
La tercera solución funciona solo hasta que se cierre el símbolo del sistema y solo para ese símbolo del sistema; todos los demás CMD aún solicitan una frase de contraseña. Además, todos los demás clientes (VS, VS Code) no se comunican con git remoto.
Dima
21

Cada vez que configuro un nuevo escritorio, olvido estas instrucciones, ¡así que agrego otra respuesta aquí, ya que me encuentro con la misma frecuencia!


Pasos rápidos para usuarios impacientes como yo

  1. Habilite el OpenSSH Authentication Agentservicio y haga que se inicie automáticamente.
  2. Agregue su clave SSH al agente con ssh-adden la línea de comando.
  3. Pruebe la integración de git, si aún le pide su frase de contraseña, continúe.
  4. Agregue la variable de entorno $ENV:GIT_SSH=C:\Windows\System32\OpenSSH\ssh.exea su sesión, o permanentemente a su entorno de usuario.

Pasos detallados: descripción general

Windows ha estado enviando con OpenSSH desde hace algún tiempo. Incluye todos los bits necesarios para que ssh funcione junto con Git, pero aún parece necesitar algo de TLC antes de que funcione al 100% sin problemas. Estos son los pasos que he seguido con éxito a partir de Windows ver 10.0.18362.449 (puede ver su versión de Windows 10 abriendo un shell cmd.exe y escribiendo ver).

Asumo aquí que ya tiene su configuración de clave SSH, y se encuentra en ~/.ssh/id_rsa

Habilite el servicio ssh-agent en su cuadro de Windows 10.

  1. Inicio-> Escriba 'Servicios' y haga clic en la Aplicación de servicios que aparece.
  2. Encuentra el OpenSSH Authentication Agentservicio en la lista.
  3. Haga clic derecho en el OpenSSH Authentication Agentservicio y elija 'Propiedades'.
  4. Cambiar el Startup type:a Automatic.
  5. Haga clic en el Startbotón para cambiar el estado del servicio a Running.
  6. Descarte el cuadro de diálogo haciendo clic OKy cierre la aplicación Servicios.

Agregue su clave a la ssh-agent

  1. Abra su shell de preferencia (usaré Windows Powershell en este ejemplo, también se aplica a Powershell Core) .
  2. Agregue su clave SSH a ssh-agent: ssh-add (puede agregar la ruta a su clave como primer argumento si difiere del predeterminado) .
  3. Ingrese su frase de contraseña si / cuando se le solicite hacerlo.

Prueba Git + SSH

  1. Abra su shell (nuevamente, estoy usando Powershell) y clone un repositorio.git clone [email protected]:octocat/Spoon-Knife
  2. Si ve este mensaje, continúe con la siguiente sección:
Enter passphrase for key '/c/Users/your_user_name/.ssh/id_rsa':

Establezca su GIT_SSHvariable de entorno

En cualquier sesión, simplemente puede configurar esta variable de entorno y la solicitud de su frase de contraseña dejará de aparecer y ssh la usará ssh-agenten su nombre. Alternativamente, puede configurar su frase de contraseña en el entorno de su usuario de forma permanente.

Para establecer solo GIT_SSHen el shell actual:

  1. Abre tu caparazón de preferencia. (Powershell para mí)
  2. Establezca la variable de entorno GIT_SSH en el apropiado ssh.exe:$Env:GIT_SSH=$((Get-Command -Name ssh).Source)
  3. Vuelva a intentar los pasos en Try Git + SSH arriba.

Para establecer GIT_SSHpermanentemente

  1. Abre el Explorador de archivos. Inicio-> escriba 'Explorador de archivos' y haga clic en él en la lista.
  2. Haga clic derecho en 'Esta PC' y haga clic en 'Propiedades'.
  3. Haga clic en 'Configuración avanzada del sistema'.
  4. Haga clic en el botón 'Variables de entorno ...'.
  5. En "Variables de usuario para your_user_name", haga clic en Nuevo ...
  6. Establecer Variable name:campo en GIT_SSH
  7. Establezca el Variable value:campo en path-to-ssh.exe (normalmente C:\Windows\System32\OpenSSH\ssh.exe).
  8. Haga clic en Aceptar para cerrar el cuadro de diálogo Nueva variable de usuario.
  9. Haga clic en Aceptar para cerrar el cuadro de diálogo Variables de entorno.
  10. Vuelva a intentar los pasos en Try Git + SSH arriba.

Tenga en cuenta que es probable que esto cambie con los nuevos pasos / procedimientos a medida que Windows 10 progresa y a medida que aprendo más. Intentaré mantener esto actualizado, espero recibir comentarios en los comentarios.

d3r3kk
fuente
3
Esta es la respuesta más completa al 31/01/2020, al menos para Windows. No hay necesidad de instalar PUTTY ni nada.
Jake
Convenido. Parece que el soporte incorporado finalmente está aquí.
Eron Lloyd
¡Leyenda! Esto resolvió mi problema. He estado buscando una solución por un tiempo, probando cosas diferentes y este es sin duda el más completo de este problema
Collin
Gracias por una buena respuesta y una que probablemente me ahorró algunas horas de perder el tiempo. +1
Enojado 84
20

Para cualquiera que necesite instrucciones más detalladas, consulte esta página: http://help.github.com/working-with-key-passphrases/

Franz
fuente
Exactamente lo que necesitaba para usar el msysgitshell.
arthurakay
1
Me funcionó al usar la aplicación de escritorio Git Bash. Usé notepad ~/.profiley pegué el contenido de ese enlace, reinicié Git Bash, ingresé mi contraseña, me beneficié ...
Daryn
Seguí la sección "Inicio automático de ssh-agent en Git para Windows" (usando git 2.x en Win 10) pero aún así me pidió contraseña todo el tiempo. La siguiente solución (masilla) de la respuesta aceptada arregló esto para mí.
jakub.g
20

En caso de que esté utilizando Git bash en Windows , puede realizar lo siguiente:

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

pedirá una frase de paso en el segundo comando, y eso es todo. Cada acción adicional que tendrá que hacer (que una vez requirió la frase de paso) no le pedirá la frase de paso (vea un ejemplo en la captura de pantalla a continuación):

agregar frase de contraseña en Git bash en Windows

Guy Avraham
fuente
2
Esto también funciona en el subsistema Ubuntu en Windows 10.
meetar
1
tenga en cuenta que si su par de claves se encuentra en otro lugar, puede reemplazar ~ / .ssh / * _ rsa con la ruta del archivo * .pem
alex_danielssen
13

Una solución adicional 5 años, 8 meses y 6 días después de la publicación de la pregunta no sería una mala idea, así que aquí va.

NOTA: Asume que está usando una computadora con Windows.

  1. Descargue git-credential-winstore .
  2. ¡Ejecutarlo! Si tiene GIT en su PATHvariable de entorno, debería funcionar. Si no lo haces, corre git-credential-winstore -i C:\Path\To\Git.exe.

La próxima vez que intente comprometerse con un repositorio, se le pedirá que ingrese sus credenciales. Eso debería ser. Ya no se le solicitarán sus credenciales hasta que cambie su contraseña.


Solo para su conocimiento ... Sus credenciales se almacenan en el Almacén de credenciales de Windows

¿Dónde guardas mis credenciales?

Esta aplicación solo usa el Windows Credential Store existente para guardar sus credenciales. Puede ver las credenciales almacenadas en Panel de control> Cuentas de usuario> Administrador de credenciales y seleccionando "Credenciales de Windows". Las entradas que comienzan con "git:" son de git-credential-winstore.

Alex Essilfie
fuente
8
Parece que esta solución no funciona con repositorios SSH, solo HTTPS. / angryface
JasonCoder
8

Si establece una contraseña para su archivo de clave, siempre tendrá que escribir esa contraseña cuando se conecte. Si crea una clave sin contraseña, no tendrá que escribirla cada vez, sin embargo, cualquier persona con acceso a su archivo de clave ahora puede conectarse a su cuenta de github.

ssh-agent también puede funcionar. Intente ejecutar eso y vea si recordará su frase de contraseña.

Grant Limberg
fuente
correr ssh-keygen -pdebería permitir que el OP no establezca una frase de contraseña
luchosrock
Todavía solicitando contraseña.
versedi
7

[editar - leer mal la pregunta, esta es una respuesta a un problema relacionado. dejando la versión reformulada para la posteridad]

Mi caso fue que estaba tratando de impulsar un repositorio alojado en uno de nuestros servidores. Cada vez que intentaba hacer un push, git me pedía mi contraseña (nb - contraseña, no la frase de contraseña de mi clave privada).

Al agregar mi clave pública a las claves autorizadas en el servidor, pude obtener actualizaciones sin contraseña para ese servidor. Y, debido a que no había una frase de contraseña en mi clave privada (¡lo cual es una mala práctica por cierto!), No necesité escribir nada en absoluto.

Aquí está el comando para agregar su clave pública a un servidor. Se supone que el usuario gites el usuario en el servidor.

cat .ssh/id_rsa.pub | ssh git@GIT_MASTER_IP 'cat >> .ssh/authorized_keys'

Puede lograr lo mismo iniciando sesión en el servidor y agregando manualmente su clave pública al archivo en ~/.ssh/authorized_keys

hwjp
fuente
¿Podría convertir esto en una descripción que pueda usar alguien que no tenga acceso a un shell? Por ejemplo, ¿qué debemos poner en claves_autorizadas usando el bloc de notas o similar?
John Little
4

Me doy cuenta de que esto está retrasado desde hace varios años, pero me topé con esta pregunta tratando de encontrar una solución, y encontré algo que se adapta a todos los niveles de experiencia, así que pensé en compartirlo.

GitHub proporciona un instalador muy útil que hace que todo sea agradable y fácil: https://help.github.com/articles/caching-your-github-password-in-git/

roobeedeedada
fuente
Tenga en cuenta que esto es el almacenamiento en caché de su contraseña de GitHub , no una frase clave de GPG.
Juez2020
4

Supongamos que le gustaría usar una solución pura de Git Bash sin usar TortoiseGit o PuTTY. Además, no desea almacenar sus frases de contraseña permanentemente, ya que es casi lo mismo que si hubiera generado su clave SSH sin una frase de contraseña en primer lugar. Pero aún quieres usar algo de caché.

Para fines de almacenamiento en caché ssh-agentse utiliza el proceso, que se incluye con la distribución Git Bash. Este proceso no se inicia de manera predeterminada, por lo que debe iniciarse primero. Para que las claves SSH ssh-addse almacenen en caché, deben agregarse a este proceso con un comando que le solicitará una frase de contraseña y la almacenará en la memoria.

Inconvenientes de otras soluciones:

  • El inicio automático, ssh-agentcomo en el artículo de GitHub, solicita una frase de contraseña desde el principio cuando inicia Git Bash, independientemente de si necesitará usar su clave SSH en esta sesión o no. Si hoy está trabajando con su repositorio local, es probable que desee proporcionar una frase de contraseña solo cuando sea realmente necesaria (por ejemplo, al interactuar con un repositorio remoto).
  • Si inicia su Me ssh-agentgusta en el artículo de GitLab con eval $(ssh-agent -s), probablemente esté cansado de escribir eso cada vez. Es probable que, eventualmente, haya agregado esas dos líneas a su .bashrcconfiguración para el inicio automático. Las desventajas son las mismas que las anteriores más una adicional: cada vez que inicie un nuevo terminal de Git Bash obtendrá un proceso ssh-agent adicional (el script bash de GitHub comprueba si ese proceso ya ha comenzado).
  • Al igual que los dos anteriores, pero especialmente cuando tiene claves SSH separadas para diferentes hosts, por ejemplo, una para GitHub y otra para GitLab, por lo que proporcionarlas todas a la vez es molesto e inconveniente.

Entonces, esta solución es para aquellos que se preguntan cómo hacer que Git Bash solicite una frase de contraseña solo una vez por sesión de Windows y solo cuando realmente sea necesario. Se asemeja al comportamiento de la gestión de frases de contraseña con GnuPG confirma el uso de la firma automáticadefault-cache-ttl .

Configurar SSH para solicitar frases de contraseña una vez, cuando sea necesario, utilizando solo Git Bash

  1. Primero, queremos iniciar automáticamente el ssh-agentinicio de un shell Git Bash. Usaremos un script modificado de GitHub para eso, ya que verifica si el proceso ya ha comenzado, pero no queremos que se ssh-addejecute de inmediato. Esta secuencia de comandos va a su ~/.bashrco ~/.profileo ~/.bash_profile( ~es el directorio de inicio de su usuario como C:\Users\Username: ejecutar cd ~y luego pwdpara que Git Bash lo imprima):

    ### Start ssh-agent
    
    env=~/.ssh/agent.env
    
    agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
    
    agent_start () {
        (umask 077; ssh-agent >| "$env")  # use -t here for timeout
        . "$env" >| /dev/null ; }
    
    agent_load_env
    
    # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
    agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
    
    if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
        agent_start
    fi
    
    unset env
  2. Ahora edite o cree un ~/.ssh/configarchivo y agregue una AddKeysToAgentopción para cada sección de host que desea activar el almacenamiento en caché (también puede activarlo globalmente colocando la directiva al comienzo del archivo antes de todas las declaraciones de host):

    # GitHub.com
    Host github.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_ed25519_github
      AddKeysToAgent yes
    
    # GitLab.com
    Host gitlab.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_ed25519_gitlab
      AddKeysToAgent yes

    Desde la página de comando man ssh config : si esta opción se establece en yes y se carga una clave desde un archivo, la clave y su frase de contraseña se agregan al agente con el tiempo de vida predeterminado, como por ssh-add (1).

El tiempo de vida máximo predeterminado es para siempre o hasta que el ssh-agentproceso finalice (ya sea manualmente desde el administrador de tareas o cuando su PC se apaga). Si desea utilizar un tiempo de espera finito, puede configurarlo con el -tparámetro ssh-agent . Cambie la línea en el script bash del primer paso anterior, por ejemplo, durante 30 minutos de vida útil de la caché de claves:

(umask 077; ssh-agent -t 30m >| "$env")

Vea aquí para otros calificadores de formato de hora.

Nikolay Kotlyarov
fuente
3

Puede crear un .bashrcarchivo en el directorio de inicio de su usuario como C:/Users/youruser, y poner allí:

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

Este script se ejecuta cada vez que se ejecuta bash. Por lo tanto, deberá ingresar la contraseña solo una vez, cuando git-bashse inicie

Algunas versiones de bash requieren .bash_profilearchivo en su lugar .bashrc, así que por si acaso clonar .bashrc:

copy .bashrc .bash_profile
Alexander Goncharov
fuente
1

puede intentar agregar -k arg cuando lo haga;

ssh-add -k ~/.ssh/id_rsa
tarikakyol
fuente