Dia*_*gon 9 export import gnupg
我已经重新安装了我的操作系统(Ubuntu 16.04)并且有一个旧的 .gnupg 目录,其中包含:
gpg-agent.conf
gpg-agent-info-<hostname>
gpg.conf
private-keys-v1.d
pubring.gpg
secring.gpg
S.gpg-agent
trustdb.gpg
Run Code Online (Sandbox Code Playgroud)
我想将旧的公钥和私钥导入新的 gnupg。(我没有简单地将 .gnupg 目录复制到新安装中,因为我知道新的 gnupg2 在数据库格式上有一些差异,这些差异是新 EC 加密选项的一部分。)
以下对公钥有效,但对私钥无效:
gpg --export --keyring=~/.gnupg.old/pubring.gpg | gpg --import
gpg --export-secret-keys --keyring=~/.gnupg.old/secring.gpg | gpg --import
Run Code Online (Sandbox Code Playgroud)
后者回应:
gpg: can't open `~/.gnupg/secring.gpg' <== New Secret Keyring
gpg: WARNING: nothing exported
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0
Run Code Online (Sandbox Code Playgroud)
请注意,它无法打开我的新秘密戒指。尝试导出到文件时出现相同的错误:
gpg --export-secret-keys --keyring=~/.gnupg.old/secring.gpg > secret.asc
gpg: can't open `~/.gnupg/secring.gpg' <== New Secret Keyring
gpg: WARNING: nothing exported
Run Code Online (Sandbox Code Playgroud)
由于我的密钥已剥离了主密钥的私有部分,我也尝试了相同的方法,使用--export-secret-subkeys,但响应是相同的。在导出后放置我的密钥 ID(电子邮件地址)也不起作用。另一方面,我可以列出键:
gpg --list-keys --keyring=~/.gnupg.old/secring.gpg
gpg: Oops; key lost!
node 0x1e7ee00 01/00 type=secret-key
node 0x1e9cbd0 00/00 type=user-id "Me <Me@home.com>" ....
node 0x1e99dd0 00/00 type=signature class=13 keyid=XXXXXXXX ts=1383637282
node 0x1e9c510 00/00 type=secret-subkey
node 0x1eaa210 00/00 type=signature class=18 keyid=XXXXXXXX ts=1449138073
node 0x1eaf1f0 00/00 type=secret-subkey
node 0x1eaf580 00/00 type=signature class=18 keyid=XXXXXXXX ts=138363647
Run Code Online (Sandbox Code Playgroud)
(我假设“丢失的密钥”是指被剥离的秘密主密钥。)谁能指导我如何解决这个问题?
在@Jens(如下)的帮助下,以下工作:
gpg --no-default-keyring --secret-keyring=~/.gnupg.old/secring.gpg --export-secret-keys | gpg --import
Run Code Online (Sandbox Code Playgroud)
首先,你在做一种“无操作”。gpg在 Ubuntu 16.04 上仍然是 GnuPG 1.4.20,同时gpg2从 GnuPG 2.0.28 跃升到 2.1.11。然后,虽然 GnuPG 2.1 对文件格式进行了一些更改(新的密钥库格式“keybox”/.kbx并将秘密密钥环合并到公共密钥环中),但它仍然兼容并将在第一次调用gpg2. 除非您手动转换,否则密钥环格式将保持旧格式。完全支持旧格式,新格式仅提供性能改进。建议的新密钥箱格式的迁移路径是在旧的 GnuPG 目录中转换,而不是移动到一个全新的目录:
要将现有的 pubring.gpg 文件转换为 keybox 格式,首先要备份 ownertrust 值,然后将文件重命名为(例如)publickeys,这样它就不会被任何 GnuPG 版本识别,然后运行导入,最后恢复ownertrust 价值观:
Run Code Online (Sandbox Code Playgroud)$ cd ~/.gnupg $ gpg --export-ownertrust >otrust.lst $ mv pubring.gpg publickeys $ gpg2 --import-options import-local-sigs --import publickeys $ gpg2 --import-ownertrust otrust.lst然后,您可以将 publickeys 文件重命名回,以便旧的 GnuPG 版本可以使用它。请记住,在这种情况下,您有两个独立的公钥副本。ownertrust 值由所有 gpg 版本保存在文件 trustdb.gpg 中,但需要采取上述预防措施以在导入时保留它们。
考虑到您发布的错误消息,新主~/.gnupg目录或密钥环的某些权限似乎~/.gnupg/secring.gpg不足以创建密钥。如果不小心从 root 用户调用了 GnuPG,这通常会发生。
来自的消息--list-keys不是正常输出,但似乎是错误消息。要打印任意密钥环,请使用--no-default-keyringand--secret-keyring选项和--list-secret-keyscommdn(并且通常在 GnuPG 命令之前总是有选项):
gpg --no-default-keyring --secret-keyring=secring.gpg --list-secret-keys
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6894 次 |
| 最近记录: |