Me pregunto si es posible usar un Yubikey para desbloquear, por ejemplo, una clave GnuPG en un servidor, ¿puedo pasar el token generado de la YubiKey a través de SSH al servidor de una manera fácil?
Me pregunto si es posible usar un Yubikey para desbloquear, por ejemplo, una clave GnuPG en un servidor, ¿puedo pasar el token generado de la YubiKey a través de SSH al servidor de una manera fácil?
GnuPG no utiliza ningún token generado por Yubikey, pero el stick implementa el protocolo de tarjeta inteligente OpenPGP. Las claves se almacenan en la YubiKey, que realiza todas las operaciones criptográficas de clave pública / privada. La protección especial se basa en el hecho de que las claves nunca pueden abandonar la YubiKey, por lo que un atacante podría utilizar la clave a lo sumo (temporalmente, siempre y cuando tenga acceso a la palanca desbloqueada), pero no puede obtenerla por completo. .
GnuPG tiene una función llamada reenvío de agente . La mayoría de las veces se reduce a configurar gpg-agent
para proporcionar un socket extra especial que solo se usa para operaciones específicas:
extra-socket /home/<user>/.gnupg/S.gpg-agent.extra
Luego, configure SSH para reenviar todas las comunicaciones en el zócalo al servidor remoto:
RemoteForward /home/<user>/.gnupg/S.gpg-agent /home/<user>/.gnupg/S.gpg-agent.extra
Más explicaciones que incluyen algunos consejos sobre nitpicks están disponibles en la página wiki vinculada anteriormente.
En las nuevas versiones de distribuciones GnuPG o Linux, las rutas de los sockets pueden cambiar. Estos se pueden encontrar a través de
$ gpgconf --list-dirs agent-extra-socket
y
$ gpgconf --list-dirs agent-socket
Luego agregue estas rutas a su configuración de SSH:
Host remote
RemoteForward <remote socket> <local socket>
Solución rápida para copiar las claves públicas:
scp .gnupg/pubring.kbx remote:~/.gnupg/
En la máquina remota, active el agente GPG:
echo use-agent >> ~/.gnupg/gpg.conf
En la máquina remota, también modifique la configuración del servidor SSH y agregue este parámetro (/ etc / ssh / sshd_config):
StreamLocalBindUnlink yes
Reinicie el servidor SSH, vuelva a conectarse a la máquina remota, entonces debería funcionar.