it-swarm.com.de

Sind PGP- und SSH-Schlüssel austauschbar?

Ich möchte einen RSA-Schlüssel in GPG generieren und in SSH login verwenden. Ist das überhaupt möglich? Wenn das so ist, wie?

edit: see @ wwerner's answer, ich habe es nicht ausprobiert, aber es scheint die aktuelle Lösung zu sein (Stand 2018)

66
destan

Ich recherchiere zu diesem Thema und kann Ihnen einige Hinweise geben, aber ich habe noch keine Möglichkeit gefunden, es zum Laufen zu bringen.

Affensphäre

Monkeysphere scheint ein sehr interessantes Projekt zu sein, aber ich konnte es unter Mac OS X nicht kompilieren, ohne meinen kleinen freien Speicherplatz mit MacPorts zu belasten.

Verwendung von gpgkey2ssh

Ich empfehle Ihnen zunächst, einen kompatiblen authorized_keys-Eintrag aus Ihrer Schlüssel-ID (z. B. BFB2E5E3) mit zu generieren

gpgkey2ssh BFB2E5E3 | tee -a ~/.ssh/authorized_keys

Hier habe ich es meinem localhost hinzugefügt, da ich einen ssh-Server zu Testzwecken ausgeführt habe, aber natürlich sollten Sie dies dem Ziel-Host hinzufügen ~/.ssh/authorized_keys. Als Nächstes müssen Sie SSH anweisen, den privaten Teil dieses Schlüssels während der Authentifizierung zu verwenden, aber das einfache Exportieren einer ASCII -Panzerversion des Schlüsselpaars funktioniert nicht:

gpg --armor --export-secret-key BFB2E5E3! |tee ~/.ssh/id_rsa
gpg --armor --export BFB2E5E3! | tee ~/.ssh/id_rsa.pub
chmod 400 ~/.ssh/id_rsa
ssh localhost

Gpg-agent verwenden

gpg-agent hat die Option --enable-ssh-support, mit der es als Ersatz für den bekannten ssh-agent verwendet werden kann. Ich habe von einigen Leuten gelesen, die versuchen, nach dem Start von ssh-add ihren GPG-Schlüssel über gpg-agent hinzuzufügen:

gpg-agent --enable-ssh-support --daemon
gpg --armor --export-secret-key BFB2E5E3! | tee ~/.gnupg/exported-keys/BFB2E5E3_sec.asc
ssh-add ~/.gnupg/exported-keys/BFB2E5E3_sec.asc

Aber ich denke nicht, dass das jemals funktionieren wird. Die gpg-agent manpage sagt:

SSH-Schlüssel, die über den Agenten verwendet werden sollen, müssen zunächst über das Dienstprogramm ssh-add zum gpg-Agenten hinzugefügt werden. Wenn ein Schlüssel hinzugefügt wird, fragt ssh-add nach dem Kennwort der angegebenen Schlüsseldatei und sendet das ungeschützte Schlüsselmaterial an den Agenten. dies veranlasst den gpg-agent, nach einer passphrase zu fragen, mit der der neu empfangene schlüssel verschlüsselt und in einem gpg-agent-spezifischen verzeichnis gespeichert wird.

Aus diesem Grund sollte gpg-agent als zusätzliche Maßnahme zum Schutz Ihrer SSH-Schlüssel mit einer GPG-Verschlüsselung verwendet werden.

Konvertieren eines GPG-Schlüssels in OpenSSH

Jérôme Pouiller schreibt in seinem Blog , dass das Dienstprogramm Gpgsm Schlüssel und Zertifikate in PCSC12 exportieren kann; Sie können dann von OpenSSH verwendet werden:

gpgsm -o secret-gpg-key.p12 --export-secret-key-p12 0xXXXXXXXX
openssl pkcs12 -in secret-gpg-key.p12 -nocerts -out gpg-key.pem
chmod 600 gpg-key.pem
cp gpg-key.pem ~/.ssh/id_rsa
ssh-keygen -y -f gpg-key.pem > ~/.ssh/id_rsa.pub

Aber ich habe keine Möglichkeit gefunden, gpgsm dazu zu bringen, meine gpg-Schlüsselpaare zu akzeptieren.

Andere Dinge, die Sie ausprobieren können

SSH verfügt über die Option -I, mit der angegeben wird, welche gemeinsam genutzte PKCS # 11-Bibliothek ssh für die Kommunikation mit einem PKCS # 11-Token verwendet werden soll, das den privaten RSA-Schlüssel des Benutzers bereitstellt. ssh-keygen kann den öffentlichen oder privaten RFC4716/SSH2-Schlüssel, den öffentlichen PEM PKCS8-Schlüssel und den öffentlichen PEM-Schlüssel verwenden, um mit den Optionen -i und -m einen OpenSSH-kompatiblen privaten (oder öffentlichen) Schlüssel zu generieren.

Ich kann immer noch keinen Weg finden, alles zusammenzufügen.

28

Ich weiß, dass dies ein alter Beitrag ist, aber für Leute wie mich, die darüber stolpern:

Es ist jetzt (seit gpg 2.1) möglich, ssh-Schlüssel einfach direkt mit gpg zu extrahieren: gpg --export-ssh-key <key id>!.

Das Zeichen ! ist optional, macht den Primärschlüssel exportierbar und lässt die Überprüfung, ob der Schlüssel authentifizierungsfähig ist ([CA]), aus.

Einzelheiten:

23
wwerner

Nein, sie sind nicht austauschbar. Ja, es ist möglich, GPG-Schlüssel zur Authentifizierung zu verwenden - das Monkeysphere -Paket enthält Tools zum Extrahieren des unformatierten RSA-Schlüsselpaars aus Ihrem GPG-Zertifikat.

  1. Ihr GPG-Zertifikat benötigt einen Unterschlüssel mit dem Funktionsflag "Authentifizierung". Führen Sie einmal aus, um einen solchen Unterschlüssel zu erstellen:

    monkeysphere g
    
  2. Fügen Sie nun Ihre Authentifizierungsunterschlüssel zu ssh-agent hinzu:

    monkeysphere s
    

Etwas relevant: dieser Gnupg-Benutzer-Thread .

13
grawity

Mit den Informationen aus den Antworten auf diese Frage und der Hilfe der gnupg-users-Mailingliste konnte ich herausfinden, wie ich meinen GPG-Schlüssel für die SSH-Authentifizierung verwenden kann. Wie bereits von Claudio Floreani in seiner Antwort erwähnt, gibt es hierfür einige Möglichkeiten.

Ich habe einen Blogpost über mögliche Lösungen geschrieben: http://budts.be/weblog/2012/08/ssh-authentication-with-your-pgp-key

Zusammenfassend: Entweder Sie verwenden GnuPG 2.1, das sich derzeit in der Beta befindet. Wenn Sie diese Version verwenden, können Sie gpg-agent einfach mit der Option --enable-ssh-support starten und den Keygrip für Ihren GPG-Schlüssel (oder Unterschlüssel) in ~/.gnupg/sshcontrol einfügen.

Wenn Sie die aktuelle stabile GnuPG-Version (2.0.x) verwenden, können Sie mit monkeysphere Ihren Schlüssel zu gpg-agent hinzufügen (erneut, nachdem Sie gpg-agent mit der Option --enable-ssh-support gestartet haben).

Es ist auch möglich, den GNOME-Schlüsselring (oder sogar den regulären ssh-Agenten) mit Hilfe von monkeysphere zu verwenden. Das einzige Problem in diesem Fall ist, dass Sie Ihren Schlüssel erneut hinzufügen müssen, wenn Sie sich erneut anmelden (in Gnome oder XFCE). Um dies zu lösen, können Sie Ihren Schlüssel manuell exportieren und konvertieren.

8
jeroen