可能重复:
GPG 和 SSH 密钥可以互换吗?
如何同时使用 gpg 和 SSH?
我知道以下基本步骤:1) 使用 gpg 加密和解密文本文件;2) 生成和使用 SSH 密钥无需密码访问远程服务器。
我想知道这两者是否可以整合。这两者是否毫无关联,在日常使用中应该分开使用?
答案1
我正在对这个主题进行一些研究,我可以给你一些提示,但我还没有找到让它发挥作用的方法。
猴子球
猴子球看起来是一个非常有趣的项目,但我无法在 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
我仍然找不到将一切整合在一起的方法。
答案2
从技术上讲,PGP 密钥可用于 SSH 身份验证。人们所说的“PGP 密钥”更像是证书,包含普通 RSA、ECDSA 或其他密钥对(主密钥和子密钥)以及证书的元数据。事实上,甚至还定义了一个“身份验证”使用标志。
不建议将同一个密钥用于多种用途;不过,这个问题很容易解决,因为您可以轻松地将仅用于身份验证的子密钥添加到您的 PGP 证书中(通过gpg --expert --edit-key
)。您将拥有一个签名/认证主密钥、一个加密子密钥和一个身份验证子密钥。
但实际上,我还没能弄清楚如何直接使用 PGP 密钥进行身份验证,尽管我太懒了,不想尝试几个想法。Monkeysphere 套件有一个工具可以将您的 GPG 身份验证子密钥添加到 ssh-agent,应该很简单。但应该有一些关于此内容的较旧的超级用户帖子。