Esta es una publicación un poco distinta: daré por hecho una familiaridad del lector con sistemas operativos Linux y con git. El objetivo es documentar la solución de un problema técnico y no me detendré a explicar cada punto. Si no has entendido el título, probablemente este artículo no sea para ti, ¡salvo que tengas curiosidad!
El caso
Utilizo Debian ocasionalmente en un segundo ordenador donde no me gusta tener claves SSH. Ahora las forjas de código, como GitLab o GitHub, impiden que uses tu contraseña en la terminal por seguridad. En su lugar, te aconsejan utilizar tokens personales de acceso (PAT, por sus siglas en inglés). Sin embargo, estos tokens no son memorizables como una contraseña, y también hay que protegerlos adecuadamente, así que no resultan tan cómodos.
La hipótesis
Git delega la responsabilidad de almacenar secretos y claves de manera segura a otros sistemas, normalmente el almacenamiento del sistema operativo. Para conectarse con ellos, git usa unos adaptadores que llama credential helpers.
Entonces, ¿debería haber un adaptador que permita a git utilizar el llavero de Gnome?
El problema
En Linux no hay un solo almacenamiento seguro; el llavero de Gnome (Gnome Keyring) es uno de ellos, pero también lo es el monedero de KDE (KDE Wallet).
Para facilitar distintos almacenamientos en Linux, ambos implementan la API de Secret Service, un estándar de freedesktop.org.
Libsecret es una biblioteca de código para leer esos secretos usando la API de Secret Service.
El adaptador adecuado en este caso se llama git-credential-libsecret
.
Sin embargo, en Debian hay una dificultad adicional.
En otras distribuciones de Linux, está disponible el binario precompilado de git-credential-libsecret
.
Por ejemplo, en Arch Linux viene con el paquete de git (Arch Wiki), y en Fedora Linux tiene su propio paquete.
Desafortunadamente, ni Debian 11 «Bullseye» ni Debian 12 «Bookworm» proveen el binario precompilado.
La solución
Afortunadamente, viendo los contenidos del paquete de git en Debian, encontré que incluye un archivo Makefile para compilar git-credential-libsecret
tú mismo.
Primero, comprueba que efectivamente tengas la biblioteca Libsecret instalada:
$ apt policy libsecret-1-0
Después, instala los archivos de desarrollo de Libsecret y compila git-credential-libsecret
con Make:
$ sudo apt install libsecret-1-dev
$ cd /usr/share/doc/git/contrib/credential/libsecret
$ sudo make
Finalmente, configura git para que use este credential helper:
$ git config --global credential.helper $PWD/git-credential-libsecret
Opcionalmente, puedes desinstalar los archivos de desarrollo de Libsecret, porque ya no serán necesarios:
$ sudo apt autoremove --purge libsecret-1-dev
La conclusión
La siguiente vez que trates de conectar a un repositorio de git mediante HTTPS en la terminal, git te pedirá tu clave (el token personal de acceso). En ese momento, lo guardará en el almacenamiento seguro, el llavero de Gnome en mi caso, mediante la biblioteca Libsecret.
A partir de entonces, siempre que el almacenamiento esté desbloqueado, ya lo utilizará automáticamente sin pedirte nada más. ¡Conseguido!
~Roboe