ssh-agent, gpg-agent y keepassxc🔗

ssh-agent es un agente que permite recordar, por un período, la frase de contraseña de las llaves privadas SSH una vez introducidas.

Para iniciar a ssh-agent puede usarse el siguiente script de Bash, el cual debe de incluirse directamente (no como función) al archivo de configuración de Bash: $HOME/.bash_profile y/o $HOME/.bashrc.

runtime_dir="/run/user/$(/usr/bin/id --user)/ssh-agent"
ps aux | grep -v grep | grep -qE "ssh-agent.*${runtime_dir}.*"
if [ $? -ne 0 ]; then
  mkdir -p $runtime_dir
  rm -f $runtime_dir/socket
  echo "# $(date)" > $runtime_dir/environment.sh
  /usr/bin/ssh-agent -a $runtime_dir/socket -s 
    | sed 's/^echo .*$//' \
    >> $runtime_dir/environment.sh
fi

Cada vez que se ejecute el archivo de configuración de Bash se cuestionará si ya existe una instancia en ejecución de ssh-agent, si no es el caso se inicia una instancia de ssh-agent con un socket en el directorio /run/user/1000/ssh-agent (suponiendo que el ID del usuario sea 1000) y el script de Bash /run/user/1000/ssh-agent/environment.sh.

El script de Bash /run/user/1000/ssh-agent/environment.sh contendrá la definición de las variables SSH_AUTH_SOCK y SSH_AGENT_PID, las cuales mantendrán sus mismos valores durante una sesión de usuario.

gpg-agent es un agente similar a ssh-agent pero lo hace para llaves privadas GPG.

De igual manera a ssh-agent puede incluirse directamente al archivo de configuración de Bash lo siguiente:

export GPG_TTY="$(/usr/bin/tty)"
export GNUPGHOME="$HOME/.gnupg"
ps aux | grep -v grep | grep -qE "gpg-agent.*${GNUPGHOME}.*"
if [ $? -ne 0 ]; then
  /usr/bin/gpg-agent --homedir $GNUPGHOME --options $GNUPGHOME/gpg-agent.conf --daemon
fi

Lo anterior define dos variables necesarias: GPG_TTY y GNUPGHOME, este último establece el directorio de trabajo de gpg-agent. Se da el argumento --options para indicar el archivo de donde leerá sus opciones de ejecución.

En $GNUPGHOME/gpg-agent.conf se pueden establecer las siguientes opciones:

pinentry-program   /usr/bin/pinentry-gtk-2
default-cache-ttl  86400
max-cache-ttl      86400

KeePassXC es un gestor de contraseñas, mediante él es posible registrar llaves privadas SSH de tal manera que él sea quien las agregue a ssh-agent sin tener que hacerlo de manera manual mediante ssh-add.

Dentro de Tools > Settings > SSH Agent se activa la opción para que KeePassXC interactúe con ssh-agent y al momento de agregar un nuevo registro de usuario-contraseña se accede a SSH Agent y se registra la llave privada SSH. En Entry > Password es en donde se registra la frase de contraseña para la llave privada SSH a guardar.

Por el momento KeePassXC no tiene la capacidad de comunicarse con gpg-agent, aunque es posible guardar la frase de contraseña de la llave privada GPG como si de un usuario-contraseña se tratara.

Fuentes🔗