¿Cómo evitar que una clave ssh que se utiliza para realizar acciones de git se descifre solo una vez también cuando se abren nuevos terminales posteriormente en Windows?

¿Cómo evitar que una clave ssh que se utiliza para realizar acciones de git se descifre solo una vez también cuando se abren nuevos terminales posteriormente en Windows?

linux

En mi sistema Linux, descifro una clave ssh privada cada vez que inicio el sistema. Una vez arrancado, abro una terminal y emito:

ssh-add ~/.ssh/id_rsa_some_key

y estoy listo para realizar operaciones de git, como git clone <git-url>, git pull -aetc. Cuando abro otra terminal y vuelvo a emitir dichos comandos, no aparecerá ningún mensaje que me solicite ingresar la contraseña de la clave ssh cifrada. En resumen, en mi sistema Linux solo tengo que ingresar la contraseña una vez.

ventanas

En mi trabajo tengo un sistema Windows. Una vez arrancado, abrogit-bashy problema:

eval $(ssh-agent)

e ssh-add ~/.ssh/private_keyingrese la contraseña y emita comandos de git que puedan comunicarse con el repositorio de git. A diferencia de mi sistema Linux, cuando abro un nuevo git-bash y emito comandos git, aparece un mensaje que me pide que ingrese la contraseña. En resumen, cuando la clave privada se ha descifrado en una terminal git-bash, entonces es posible interactuar con el repositorio git, pero cuando se abre una nueva terminal, la clave ssh se debe descifrar nuevamente.

¿Qué intenté?

Intenté usar el concurso. Este primer problema es que el id_rsa no era el adecuado. Se tuvo que crear una nueva clave usando puttygen, pero luego resultó que no será posible usar la URL ssh git que comienza con git@. Tuvo que ser reemplazado con la URL https, pero eso no es lo que quiero.

¿Qué respuesta prefiero?

Prefiero una respuesta que satisfaga los siguientes criterios:

  1. La clave Ssh debe descifrarse una vez que se haya iniciado el sistema Windows y se haya abierto una terminal para realizar acciones de git.
  2. Cuando se abre una nueva terminal, se puede continuar interactuando con el repositorio git, es decir, no aparecerá ningún mensaje que solicite ingresar la contraseña.
  3. No soy devoto de git-bash. Si hay otro terminal en Windows que coincide con los dos primeros criterios, entonces por mí está bien.

Respuesta1

El comando

eval $(ssh-agent)

inicia el proceso del agente SSH (equivalente a Pageant) y normalmente crea dos variables de entorno: SSH_AUTH_SOCK y SSH_AGENT_PID (al menos en Linux, no sé si Windows git-bash hace alguna diferencia aquí; probablemente no).

Si la variable SSH_AUTH_SOCK está configurada y apunta a un socket de agente de autenticación válido, cualquier proceso que pueda leer la variable puede usarla. Entonces solo necesitas una manera de que el valor de esta variable se propague de una sesión de git-bash a otra. La variable SSH_AGENT_PID es solo una conveniencia, para permitir que el agente se elimine fácilmente cuando sea necesario.

Si puedes almacenar esas variables de entorno (o incluso solo SSH_AUTH_SOCK) en un archivo, para que tus ventanas posteriores de git-bash puedan leerlo, puedes escribirlo de esta manera:

Siempre que se inicia un nuevo git-bash (es decir, con el .bashrcscript o su equivalente de git-bash)

  • comprobar la existencia del archivo de variables de entorno del agente SSH
  • si el archivo existe:
    • léelo
    • Si el socket del agente (y opcionalmente el proceso) enumerado en el archivo todavía existe, use las variables tal como están en su sesión actual.
  • de lo contrario (es decir, si el archivo no estaba allí o su información estaba obsoleta):
    • correreval $(ssh-agent)
    • crear un nuevo archivo de variable de entorno del agente SSH
  • ¡hecho!

Además, es posible que necesites ingresar la URL SSH git en formato completo, es decir, en lugar de solo [email protected]/project.git, debes escribirla así:

ssh://[email protected]/project.git

Técnicamente, el formulario sin ssh://prefijo es solo una abreviatura que es más conveniente escribir en la línea de comando.

información relacionada