如何同时使用gpg和SSH?[重复]


11

可能重复:
GPG和SSH密钥可以互换吗?

如何同时使用gpg和SSH?

我知道以下基本过程:1)使用gpg加密和解密文本文件,以及2)生成和使用SSH密钥无需密码即可访问远程服务器。

我不知道两者是否可以整合。两者是否无关,在日常使用中应该分开吗?

Answers:


7

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

猴球

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选项。

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


1
供以后参考,如果您发现两个基本相同的问题,可以将它们标记为重复(使用flag问题下方的链接),而不是将相同的答案发布两次。不过,感谢您的详细回复!
nhinkle '02

抱歉,我不知道此功能。谢谢
Claudio Floreani

2
我不确定您要完成什么gpg --armor --export-secret-key BFB2E5E3! |tee ~/.ssh/id_rsa。您使用的tee只是为了看到输出?该命令的输出不适用于ssh-add;生成的id_rsa文件无法加载到ssh-agent或中gpg-agent,也不能直接由使用ssh
larsk 2013年


2

从技术上讲,是的,PGP密钥可用于SSH身份验证。人们所谓的“ PGP密钥”更多是证书,包含普通的RSA,ECDSA或其他密钥对(主密钥和子密钥)以及证书的元数据。实际上,甚至定义了“身份验证”使用标志。

但是,建议不要将同一密钥用于多个目的。但是,这很容易解决,因为您可以轻松地将仅身份验证的子项添加到PGP证书中(通过gpg --expert --edit-key)。您将拥有一个签名/认证主密钥,一个加密子密钥和一个认证子密钥。

在实践中,尽管我一直懒得尝试一些想法,但我仍无法弄清楚如何直接使用PGP密钥进行身份验证。Monkeysphere套件具有将GPG身份验证子项添加到ssh-agent的工具,应该很简单。但是应该对此有一些较旧的超级用户帖子。


谢谢提供信息。它们很有用,但不足以回答我的问题。我仍然不知道如何集成我的PGP证书和SSH密钥。
qazwsx 2012年

来自Monkeysphere文档;monkeysphere subkey-to-ssh-agent将密钥加载到代理中。
user1686 2012年
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.