GPG 工具:私钥的位置

SPR*_*BRN 5 pgp gnupg osx-el-capitan macos

我搬到了另一台 Macbook。由于昂贵的 SSD 和非常小的磁盘大小,并且因为我想从这个安装开始干净,我无法传输用户文件夹。我连接了外置机箱中的旧磁盘,看到我忘记导出两个私钥。我想从外部磁盘或 Time Machine 恢复它们。

在哪里可以找到 GPG 工具私钥,以便导出它们,或复制整个 GPG 工具文件夹?

Jen*_*rat 10

默认情况下,GnuPG 密钥环存储在(隐藏)文件夹中~/.gnupg;换句话说.gnupg,您的主目录中的文件夹。您可以简单地将整个文件夹复制到新机器上。如果之后 GnuPG 无法正常工作或显示一些错误消息表明权限损坏,请确保在之后通过在终端应用程序中运行以下命令获得所有权(即使您的用户名相同,内部 ID 也可能不同)将查询您的用户密码):

sudo chown -R $USER:staff ~/.gnupg
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用

gpg --export-secret-keys [key-id] >secret-keys.gpg
Run Code Online (Sandbox Code Playgroud)

命令。如果您想从旧磁盘中恢复密钥,请将其连接到您的计算机。要处理旧磁盘的 GnuPG 密钥环,请使用该--homedir选项,这将导致类似

gpg --homedir /Volumes/[old-disks-name]/Users/[username]/.gnupg --list-secret-keys
Run Code Online (Sandbox Code Playgroud)

列出可用的密钥,以及

gpg --homedir /Volumes/[old-disks-name]/Users/[username]/.gnupg --export-secret-keys [key-id] > secret-keys.gpg
Run Code Online (Sandbox Code Playgroud)

导出它们。您还可以将它们直接导入到新的 GnuPG 密钥环中,而不是存储在中间文件中(注意管道--homedirGnuPG 调用中缺少的参数):

gpg --homedir /Volumes/[old-disks-name]/Users/[username]/.gnupg --export-secret-keys [key-id] | gpg --import
Run Code Online (Sandbox Code Playgroud)

2019/macOS Catalina 更新:

时间机器备份可以安装,但不能就地修改。这意味着 chown 将失败,并且您不能在--homedir没有获得以下流的情况下将该选项与 gpg 一起使用:

gpg: failed to create temporary file '/Volumes/<Backup Drive>/Backups.backupdb/<Compute Name>/Latest/Macintosh HD/Users/<name>/.gnupg/': Permission denied
gpg: can't connect to the agent: Permission denied
Run Code Online (Sandbox Code Playgroud)

chown 将失败并显示如下消息流:

$ sudo chown -R user:staff .gnupg

chown: .gnupg/tofu.db: Operation not permitted
chown: .gnupg/trustdb.gpg: Operation not permitted
chown: .gnupg: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

从 Time Machine 备份中复制 .gnupg 文件夹,chown 并查看/提取私钥,如上所示:

$ mkdir ~/gpg_recovery
$ cp -r /Volumes/<Backup Drive>/Backups.backupdb/<Compute Name>/Latest/Macintosh HD/Users/<name>/.gnupg ~/gpg_recovery/
$ cd ~/gpg_recovery/
$ sudo chown -R $USER:staff .gnupg
Password:
$ gpg --homedir ~/gpg_recovery/.gnupg --list-secret-keys

$ gpg --homedir ~/gpg_recovery/.gnupg --export-secret-keys | gpg --import
gpg: key xxxxxxxxxxxxxxxx: public key "xxxxxxxxxxxxxxxxxxxxxxx" imported
gpg: key xxxxxxxxxxxxxxxx: secret key imported
gpg: Total number processed: 1
gpg:               imported: 1
gpg:       secret keys read: 1
gpg:   secret keys imported: 1
Run Code Online (Sandbox Code Playgroud)