GPG 和 SSH 密钥可以互换吗?

GPG 和 SSH 密钥可以互换吗?

我想生成一个RSA密钥GPG并在登录时使用它SSH。这可能吗?如果可以,怎么做?

编辑:参见@wwerner 的回答,我没有尝试过,但它似乎是目前的解决方案(截至 2018 年)

答案1

我知道这是一篇老帖子,但对于像我这样偶然发现这篇文章的人来说:

现在(自 gpg 2.1 起)可以使用 gpg: 直接简单地提取 ssh 密钥 gpg --export-ssh-key <key id>!

!标记是可选的,它使主密钥可导出,并省略检查密钥是否具有身份验证功能([CA])。

细节:

答案2

我正在对这个主题进行一些研究,我可以给你一些提示,但我还没有找到让它发挥作用的方法。

猴子球

猴子球看起来是一个非常有趣的项目,但我无法在 Mac OS X 下编译它,因为 MacPorts 会堵塞我的少量可用磁盘空间。

使用 gpgkey2ssh

我建议你尝试的第一种方法是从你的密钥 ID(例如 BFB2E5E3)生成兼容的 authorized_keys 条目

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

这里我将其添加到我的本地主机,因为我运行了一个 ssh 服务器用于测试目的,但当然你应该将其添加到目标主机~/.ssh/authorized_keys。接下来你需要告诉 SSH 在身份验证期间使用此密钥的私有部分,但简单地导出密钥对的 ASCII 装甲版本不起作用:

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

gpg-agent有一个选项--enable-ssh-support允许它作为众所周知的替代品ssh-agent。我读到过有些人尝试通过ssh-add他们的 GPG 密钥添加,然后以gpg-agent这种方式启动:

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

但我不认为这能奏效。gpg-agent 手册页说:

要通过代理使用的 SSH 密钥需要先通过 ssh-add 实用程序添加到 gpg-agent。添加密钥时,ssh-add 将要求提供所提供密钥文件的密码,并将未受保护的密钥材料发送给代理;这会导致 gpg-agent 要求输入密码,该密码将用于加密新收到的密钥并将其存储在 gpg-agent 特定目录中。

因此,似乎gpg-agent应该将其作为一项附加措施,使用 GPG 加密来保护您的 SSH 密钥。

将 GPG 密钥转换为 OpenSSH

Jérôme Pouiller 在他的博客写道,Gpgsm 实用程序可以导出 PCSC12 中的密钥和证书;然后它们可以被 OpenSSH 使用:

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

但是我还没有找到方法来gpgsm接受我的 gpg 密钥对。

您可以尝试的其他方法

SSH 有一个-I选项可以指定 PKCS#11 共享库ssh,用于与提供用户私有 RSA 密钥的 PKCS#11 令牌进行通信。 可以使用 RFC4716/SSH2 公钥或私钥、PEM PKCS8 公钥和 PEM 公钥,使用和选项ssh-keygen生成与 OpenSSH 兼容的私钥(或公钥)。-i-m

我仍然找不到将一切整合在一起的方法。

答案3

不,它们不能互换。是的,可以使用 GPG 密钥进行身份验证 –猴子球该软件包中有从您的 GPG 证书中提取原始 RSA 密钥对的工具。

  1. 您的 GPG 证书将需要一个具有“身份验证”功能标志的子项。要创建这样的子项,请运行一次:

    monkeysphere g
    
  2. 现在将您的身份验证子密钥添加到ssh 代理

    monkeysphere s
    

有点相关:这个 gnupg-users 主题

答案4

借助此问题的答案中的信息以及 gnupg-users 邮件列表的帮助,我能够弄清楚如何使用我的 GPG 密钥进行 SSH 身份验证。正如 Claudio Floreani 在他的回答中提到的,有几种可能的方法可以做到这一点。

我写了一篇博客文章,介绍一些可能的解决方案:http://budts.be/weblog/2012/08/ssh-authentication-with-your-pgp-key

总结一下:要么使用 GnuPG 2.1,目前处于测试阶段。使用此版本时,您只需使用 --enable-ssh-support 选项启动 gpg-agent,然后将 GPG 密钥(或子密钥)的 keygrip 添加到 ~/.gnupg/sshcontrol 中。

当您使用当前稳定的 GnuPG 版本(2.0.x)时,您可以使用 monkeysphere 将您的密钥添加到 gpg-agent(再次,在使用 --enable-ssh-support 选项启动 gpg-agent 之后)。

还可以借助 monkeysphere 使用 GNOME 密钥环(甚至是常规 ssh 代理)。在这种情况下,唯一的问题是,您必须在再次登录(进入 Gnome 或 XFCE)时重新添加密钥。要解决这个问题,您可以手动导出密钥并进行转换。

相关内容