¿Cómo hacer que git no solicite la contraseña para la clave ssh?

¿Cómo hacer que git no solicite la contraseña para la clave ssh?

Estoy usando git bash y configuro la clave ssh usando ssh-keygen y cada vez que hago algo con un repositorio, git me pide una frase de contraseña para /c/Users/jankiewj/.ssh/id_rsa. ¿Hay alguna manera de desactivar esa frase de contraseña?

EDITAR: Edité el título original (eliminé Windows) ya que acabo de usar una instalación nueva de Ubuntu en mi computadora portátil de trabajo y cuando la clave ssh tiene una frase de contraseña, siempre la solicita y la solución para solucionarlo es la misma. Probablemente esto funcione igual en MacOSX que también es Unix y usa las mismas herramientas básicas.

Respuesta1

Puede ejecutar esto en git bash, Windows WLS o bash en GNU/Linux real.

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

le pedirá una contraseña en el segundo comando y listo. Cada acción adicional que deba realizar (que alguna vez requirió una frase de contraseña) no le solicitará la frase de contraseña (vea un ejemplo en la captura de pantalla a continuación):

agregar frase de contraseña en git bash en Windows

Respuesta2

Un poco mejor ysolución permanentees iniciar automáticamente el agente ssh al abrir git bash en Windows. Puede copiar/pegar lo siguiente en su .profile o .bashrc. prefiero ponerlo en el.perfil

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

Esta solución fue tomadade este artículo de ayuda de github

Respuesta3

TDLR: para usuarios de Windows,

  • correrssh-add "C:\\Users\\<your user>/.ssh/id_rsa"
  • nossh-add ~/.ssh/id_rsa

Por ejemplo, veo esto todo el tiempo:

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /c/Users/User/.ssh/id_rsa: 
Identity added: /c/Users/User/.ssh/id_rsa (/c/Users/User/.ssh/id_rsa)

$ git pull
Enter passphrase for key 'C:\Users\User/.ssh/id_rsa': 

Tenga en cuenta los separadores de ruta inconsistentes: el agente ssh convierte ~ usando separadores de ruta de Unix, pero git usa separadores de ruta de Windows en su lugar. Dado que la ruta del id_rsaarchivo se utiliza como clave, esto explica por qué se omite el caché.

  • Otra diferencia es C:/en lugar de/c/
  • Observación relacionada: cuando git le solicita la frase de contraseña, no se almacenará en caché, por lo que puede ingresarla allí indefinidamente. Intente pasar la frase a ssh-addonly.
  • En Windows, suponga que ~tiene "varios valores", por lo que es mejor ser explícito.
  • ssh-addmira ubicaciones predeterminadas como ~/.ssh/id_rsa. En Windows, asuma que eso es ambiguo. Pase explícitamente la ruta formateada explícitamente en lugar de confiar en las rutas predeterminadas:
    • ssh-add "C:\\Users\\<your user>/.ssh/id_rsa", es decir, también en la respuesta de @velval.

Respuesta4

Llaveroes un programa para hacer este trabajo de forma inteligente.

Debe ejecutarse desde .bashrc (o equivalente) y configurará el entorno correctamente, sin otra configuración que las claves que debe cargar.

Esto es lo que uso:keychain --quiet key1.pem key2.pem

Se da cuenta de que el shell es Zsh y funcionó exactamente igual cuando usé Bash.

información relacionada