SSH-Authentifizierung mit GPG-Agent und einer anderen Schlüsselquelle?

SSH-Authentifizierung mit GPG-Agent und einer anderen Schlüsselquelle?

kurz und knapp: Gibt es eine Möglichkeit, die dauerhafte Importfunktion zu deaktivieren gpg-agentoder 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-supportDas funktioniert einwandfrei.

Ich habeandere Schlüsselverfügbar (Dateisystem und KeePassXC). Wenn Sie ssh-addoder KeePassXC verwenden, um diese hinzuzufügen, werden sie importiert gpg-agentund 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-adddas 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-agentan 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.soModul 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.)

  1. 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
    
  2. 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 ) ykmanverwenden :yubico-piv-toolpkcs11-toolp11tool

    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
    
  3. Exportieren Sie den öffentlichen Schlüssel im authorized_keys-Format:

    ssh-keygen -D opensc-pkcs11.so > Yubikey.pub
    
  4. Verwenden Sie die ssh -IOption oder PKCS11ProviderEinstellung 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).

verwandte Informationen