从 GnuPG 导出私有 ed25519 密钥以在 SSH 中使用

Dav*_*ave 7 ssh gpg

有没有办法从 GnuPG 中存储的 ed25519 密钥对创建 id_ed25519 (不是 id_ed25519.pub)文件?

我已经开始在 GPG 中跟踪我的 SSH 密钥:

sec   rsa3072 2017-12-12 [C]
      DDD8CEFDE281D48CBBF0C56FE2AA8C94C8A7C456
uid           [ultimate] Dave <dave@example.com>
ssb   rsa3072 2017-12-12 [S]
ssb   rsa3072 2017-12-12 [E]
ssb   rsa3072 2017-12-12 [A]
ssb   ed25519 2017-12-12 [A]
Run Code Online (Sandbox Code Playgroud)

为了导出我的公钥以供 SSH 使用,我使用了--export-ssh-keyGnuPG 中自 2.1 版本以来可用的选项。这适用于 RSA 和 ed25519 密钥。

$ gpg -o id_rsa.pub --export-ssh-key 5D61D0F9!
$ gpg -o id_ed25519.pub --export-ssh-key 0A072B72!
Run Code Online (Sandbox Code Playgroud)

(! 强制 GnuPG 使用指定的子密钥,而不是第一个可用的身份验证密钥。)

为了导出 RSA 私钥,我使用了如下工作流程:

$ gpg --export-secret-subkeys \
--export-options export-reset-subkey-passwd 0A072B72! | \
openpgp2ssh 0A072B72 > id_rsa
Run Code Online (Sandbox Code Playgroud)

这将创建 SSH 可以理解的 RSA 私钥,但没有密码。

要重新添加密码,我使用:

$ ssh-keygen -p -f id_rsa
Run Code Online (Sandbox Code Playgroud)

在我的 Windows 工作站上,我使用 PuTTYGen 将密钥转换为 PuTTY 可以理解的内容。

这与 ed25519 键不同,因为openpgp2ssh不处理 ed25519 键。

据我所知,有些人直接通过 SSH 使用 GPG 密钥环,但这对我不起作用。我需要将私钥分离出来以便与 Windows 上的 PuTTY 一​​起使用。