kurz und knapp: Gibt es eine Möglichkeit, die dauerhafte Importfunktion zu deaktivieren gpg-agent
oder sie zu umgehen, um die Verwendung unterschiedlicher Quellen für SSH-Schlüssel zu ermöglichen?
Situation
ich benutzeGnuPG 2-Schlüssel(auf einem YubiKey) für die SSH-Authentifizierung über gpg-agent
. enable-ssh-support
Das funktioniert einwandfrei.
Ich habeandere Schlüsselverfügbar (Dateisystem und KeePassXC). Wenn Sie ssh-add
oder KeePassXC verwenden, um diese hinzuzufügen, werden sie importiert gpg-agent
und in gespeichert ~/.gnupg/private-keys-v1.d/
. Ich muss ein zusätzliches Passwort angeben, um diese zu verschlüsseln.
Das Problem
Dies funktioniert wie angekündigt, macht jedoch die anderswo gespeicherten Schlüssel sinnlos:
- Ich möchte, dass KeePassXCSchlüssel vorübergehend hinzufügenzum aktuellen Zeitpunkt
ssh-agent
, wenn die Passwortdatenbank entsperrt wird. Die Schlüssel sollten danach nicht dauerhaft verfügbar sein. - Ähnliches gilt für
ssh-add
das Einbinden von Schlüsseldateien aus der Shell: Ich möchte diese nicht importieren und persistent machen und dabei noch mehr Passwörter angeben müssen.
Wie vermeide ich den Import und erlaube gleichzeitig die Verwendung aller Schlüsselquellen? Eine Idee, die ich hatte, war, mehrere Agenten auf derselben Maschine einzurichten und diese möglicherweise gpg-agent
an eine lokale weiterzuleiten ssh-agent
, aber das klingt, als wäre es möglicherweise zu kompliziert.
Ein ähnliches Problem ist Teildieses KeePassXC-Problem, aber es wurde keine Lösung vorgeschlagen.
Antwort1
Dritte Option: Anstatt den Yubikey über den GPG-Agenten zu verwenden, verwenden Sie dessen PIV-Smartcard-Unterstützung über PKCS#11. Dies wird von OpenSSH nativ unterstützt über PKCS11Provider
:
ssh -I opensc-pkcs11.so root@myhost
ssh-agent kann auch auf PKCS#11-Schlüssel aufmerksam gemacht werden:
ssh-add -s opensc-pkcs11.so
(Yubico stellt auch sein eigenes Yubikey-spezifisches libykcs11.so
Modul als Teil des yubico-piv-tools bereit, aber da letzteres mittlerweile veraltet ist, würde ich davon ausgehen, dass libykcs11.so ebenfalls veraltet ist und Sie einfach die generische PIV-Unterstützung von OpenSC verwenden sollten. In der Praxis sind die beiden Module austauschbar und erkennen die Objekte des jeweils anderen problemlos.)
Beachten Sie, dass die OpenPGP- und PIV-Applets von Yubikey völlig getrennt sind und Sie keinen Schlüssel zwischen ihnen verschieben können. Wenn es sich also um ein hardwaregeneriertes Schlüsselpaar handelt, müssen Sie leider ein neues erstellen ykman piv
. (Yubikey ermöglicht Ihnen jedoch den Import softwaregenerierter Schlüssel.)
Legen Sie eine PIN fest (und einen PUK zum Entsperren einer vergessenen PIN). Beide müssen alphanumerisch und 6–8 Zeichen lang sein:
ykman piv change-pin -P 123456 ykman piv change-puk -p 12345678
Generieren Sie einen Schlüssel zusammen mit einem selbstsignierten Zertifikat (das für SSH irrelevant ist):
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
Falls Sie nicht über die neuere Version verfügen , können Sie die ältere oder sogar verschiedene generische PKCS#11-Tools (z. B. OpenSC oder GnuTLS )
ykman
verwenden :yubico-piv-tool
pkcs11-tool
p11tool
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
Exportieren Sie den öffentlichen Schlüssel im authorized_keys-Format:
ssh-keygen -D opensc-pkcs11.so > Yubikey.pub
Verwenden Sie die
ssh -I
Option oderPKCS11Provider
Einstellung beim Verbinden. (Sie werden jedes Mal nach der Smartcard-PIN gefragt – richten Sie bei Bedarf Multiplexing für die SSH-Verbindung ein, um dies zu reduzieren.)
Dieser Ansatz hat noch weitere Vorteile: Er ist auch unter Windows sehr einfach zu verwenden, da Windows bereits über einen Treiber für PIV-Smartcards verfügt (z. B. über PuTTY-CAC oder mehrere andere Projekte, die die CAPI/CNG-Schlüsselspeicherung mit SSH-Clients verbinden).