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-agent
se 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-add
se 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-agent
como 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-agent
gusta 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 .bashrc
configuració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
Primero, queremos iniciar automáticamente el ssh-agent
inicio 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-add
ejecute de inmediato. Esta secuencia de comandos va a su ~/.bashrc
o ~/.profile
o ~/.bash_profile
( ~
es el directorio de inicio de su usuario como C:\Users\Username
: ejecutar cd ~
y luego pwd
para 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
Ahora edite o cree un ~/.ssh/config
archivo y agregue una AddKeysToAgent
opció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-agent
proceso 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 -t
pará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.