GPG和SSH密钥可以互换吗?


70

我想输入一个RSA密钥GPG并在SSH登录时使用它。这有可能吗?如果是这样,怎么办?

编辑:请参阅@wwerner的答案,我没有尝试过,但这似乎是当前的解决方案(截至2018年)

Answers:


26

我知道这是一篇过时的文章,但对于像我这样的人来说,是绊脚石:

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

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

细节:


这个答案应该是公认的。:)
Inkeliz '18

30

我正在对此主题进行一些研究,可以给您一些提示,但是我还没有找到一种使之起作用的方法。

猴球

Monkeysphere似乎是一个非常有趣的项目,但是我无法在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代理手册页说:

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

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

将GPG密钥转换为OpenSSH

JérômePouiller在他的博客中写道,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令牌进行通信。 ssh-keygen可以使用RFC4716 / SSH2公共或私有密钥,PEM PKCS8公共密钥和PEM公共密钥生成使用的OpenSSH的兼容私人(或公共)键-i-m选项。

我仍然找不到将所有内容放在一起的方法。


5
请注意,gpgkey2ssh--export-ssh-key2.1.11版(2016-01-26)起已被替换。我花了一段时间才意识到这一点。用法是gpg --export-ssh-key BFB2E5E3
MayeulC '17


Linode上有一篇不错的文章,但他们使用gpg-agent来通过SSH进行身份验证。他们不会将gpg秘密密钥转换为SSH私钥。
Xorax

14

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

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

    monkeysphere g
    
  2. 现在将您的身份验证子项添加到ssh-agent

    monkeysphere s
    

有点相关:这个gnupg-users线程


9

有了有关此问题的答案中的信息以及gnupg-users邮件列表的帮助,我便能够弄清楚如何使用GPG密钥进行SSH身份验证。正如克劳迪奥·弗洛雷阿尼(Claudio Floreani)在回答中已经提到的那样,有几种可能的方法可以做到这一点。

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

总结:您可以使用当前处于beta版的GnuPG 2.1。使用此版本时,只需使用--enable-ssh-support选项启动gpg-agent并将GPG密钥(或子密钥)的密钥集添加到〜/ .gnupg / sshcontrol中。

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

在Monkeysphere的帮助下,也可以使用GNOME密钥环(甚至是常规的ssh-agent)。在这种情况下,唯一的问题是,当再次登录(登录到Gnome或XFCE)时,您将不得不重新添加密钥。为了解决这个问题,您可以手动导出密钥并进行转换。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.