tl;dr: ¿Hay alguna manera de deshabilitar la funcionalidad de importación persistente gpg-agent
o solucionarla para permitir el uso de diferentes fuentes para claves SSH?
Situación
yo sueloGnuPG 2 llaves(en una YubiKey) para autenticación SSH a través gpg-agent
de enable-ssh-support
. Esto funciona bien.
Yo tengootras llavesdisponibles (sistema de archivos y KeePassXC). Cuando se utiliza ssh-add
KeePassXC para agregarlos, se importan gpg-agent
y se almacenan en ~/.gnupg/private-keys-v1.d/
. Necesito proporcionar una contraseña adicional para cifrarlos.
El problema
Esto funciona como se anuncia, pero anula el propósito de tener claves almacenadas en otro lugar:
- Quiero que KeePassXCagregar claves temporalmentea la actual
ssh-agent
cuando desbloquea la base de datos de contraseñas. Las claves no deberían estar disponibles permanentemente después. - Similar al
ssh-add
procesamiento de archivos clave desde el shell: no quiero importarlos ni conservarlos mientras tengo que proporcionar aún más contraseñas.
¿Cómo evito la importación y al mismo tiempo permito que se utilicen todas las fuentes de claves? Una idea que tenía era configurar varios agentes en la misma máquina, posiblemente gpg-agent
reenviando a un local ssh-agent
, pero parece que puede ser demasiado complicado.
Un problema similar es parte deeste problema de KeePassXC, pero no se sugirió ninguna solución.
Respuesta1
Tercera opción: en lugar de usar Yubikey a través de gpg-agent, use su soporte de tarjeta inteligente PIV a través de PKCS#11. Esto es compatible de forma nativa con OpenSSH a través de PKCS11Provider
:
ssh -I opensc-pkcs11.so root@myhost
ssh-agent también puede conocer las claves PKCS#11:
ssh-add -s opensc-pkcs11.so
(Yubico también proporciona su propio módulo específico de Yubikey libykcs11.so
como parte de yubico-piv-tool, pero como este último ahora está en desuso, supongo que libykcs11.so también está en desuso y que debería usar el soporte PIV genérico de OpenSC. En la práctica Los dos módulos son intercambiables y reconocerán los objetos del otro sin ningún problema.)
Tenga en cuenta que los subprogramas OpenPGP y PIV de Yubikey están completamente separados y no puede mover una clave entre ellos, por lo que si se trata de un par de claves generado por hardware, desafortunadamente necesitará crear uno nuevo usando ykman piv
. (Sin embargo, Yubikey le permite importar claves generadas por software).
Establece un PIN (y un PUK para desbloquear un PIN olvidado). Ambos deben ser alfanuméricos y deben tener entre 6 y 8 caracteres:
ykman piv change-pin -P 123456 ykman piv change-puk -p 12345678
Genere una clave, junto con un certificado autofirmado (que a SSH no le importará):
ykman piv info ykman piv generate-key -a ECCP256 9a /tmp/9a.pub ykman piv generate-certificate 9a /tmp/9a.pub -s "Thomas" -d 3650 rm /tmp/9a.pub
En caso de que no tenga la versión más nueva
ykman
, puede utilizar lasyubico-piv-tool
herramientas PKCS#11 más antiguas o incluso varias genéricas (por ejemplo, OpenSCpkcs11-tool
o GnuTLSp11tool
):yubico-piv-tool -a change-pin -P 123456 yubico-piv-tool -a change-puk -P 12345678 yubico-piv-tool -a status yubico-piv-tool -a generate -A ECCP256 -s 9a -o /tmp/9a.pub yubico-piv-tool -a verify-pin -a selfsign-certificate \ -s 9a -S "/CN=Thomas" -i /tmp/9a.pub -o /tmp/9a.crt yubico-piv-tool -a import-certificate -s 9a -i /tmp/9a.crt
Exporte la clave pública en formato de claves_autorizadas:
ssh-keygen -D opensc-pkcs11.so > Yubikey.pub
Utilice la
ssh -I
opción o laPKCS11Provider
configuración al conectarse. (Se le solicitará el PIN de la tarjeta inteligente cada vez; configure la multiplexación de la conexión SSH si es necesario para reducir esto).
Este enfoque tiene otras ventajas: también es muy fácil de usar en Windows, debido a que Windows ya tiene un controlador para tarjetas inteligentes PIV (por ejemplo, a través de PuTTY-CAC o varios otros proyectos que unen el almacenamiento de claves CAPI/CNG con clientes SSH).