45

我阅读了这篇文章存档链接),它很好地解释了如何在 macOS 上设置 PGP。但我打算使用生成的密钥来签署 Git 提交,所以我想我需要将密钥传输到其他计算机。它是否正确?如果是这样,在设备之间传输这些密钥的最佳方式是什么?

4

1 回答 1

99

是的,您需要转移密钥。Mac 和 Linux 的工作方式相同,将密钥存储在~/.gnupg. 传输文件的最安全方法是使用scp(ssh 的一部分):

scp -rp ~/.gnupg othermachine:

但是,您需要先ssh工作。

使用 USB 闪存驱动器传输它们并不是一个好主意,因为即使您删除了文件,您的私钥也会留在该驱动器上。尽管它受密码保护,但如果有人获得了密钥文件的副本,他们可以在闲暇时对其进行长时间的暴力攻击。

我不知道 Windows 上目录的位置。gpg 文档会说,内容几乎肯定是一样的。

复制整个密钥环既快速又简单,但有时您希望能够在机器之间移动单个密钥,而不会覆盖整个密钥环并丢失已经存在的密钥。可以使用gpg --export-secret-key和选择性地复制单个键gpg --import。如果您对目标计算机具有 ssh 访问权限,则可以使用管道执行此操作,而无需在任何地方存储中间密钥:

如果您在已经拥有密钥的机器上:

gpg --export-secret-key SOMEKEYID | ssh othermachine gpg --import

如果您在需要密钥的机器上:

ssh othermachine gpg --export-secret-key SOMEKEYID | gpg --import

如果gpg不在远程机器上的默认位置之一(例如,它在/opt/local/binMac 上),您必须提供 ssh 的完整路径,或将其符号链接到标准位置之一,例如/usr/local/bin.

请注意,传输的数据仍受密码保护,并且密钥在目的地的密码与在源的密码相同。如果您想在每个地方使用不同的密码,您需要在目的地更改密码,或者在导出之前在源临时更改密码。我需要与一位同事共享一个密钥,以便让他能够更新我们共同管理的 Debian 软件包存储库,但我不想与他共享我的密码。所以我将密码改为临时密码,将导出的密钥发送给他(通过 gpg 加密的电子邮件!),口头告诉他临时密码,并要求他在导入密钥后立即设置新密码。然后,我将密钥副本上的密码改回原来的密码。


2021-03-03 更新

使用 GnuPG 2.0,如果您从远程计算机导出密钥并且没有 X11 连接转发,则输入密码可能会遇到问题。例如,gpg说“无法打开'/dev/tty'”。如果您强制使用密钥进行伪终端分配,则会ssh -t与终端活动(例如密码提示和\rs)混淆。解决此问题的一种方法是:

ssh othermachine gpg --passphrase-fd 0 --pinentry-mode loopback ...

然后,您需要输入密码并按 Enter。不会有提示,也不会抑制回显(因此密码将在您的终端上可见)。如果您对回声有强烈的感觉,您可以用 暂时关闭它,stty -echo然后用 重新打开stty echo。这可以全部合并到一个命令中,如下所示:

stty -echo; \
  ssh othermachine gpg --passphrase-fd 0 --pinentry-mode loopback \
    --export-secret-key SOMEKEYID | gpg --import; \
stty echo

但是,您很少需要这样做,因为到目前为止,最常见的情况是当您从您所在的机器导出并导入到您 ssh 到的远程机器上时。

于 2010-07-04T22:09:58.740 回答