如何导入秘密 gpg 密钥(从一台机器复制到另一台机器)?

use*_*849 239 gpg

我正在尝试将我的 gpg 密钥从一台机器复制到另一台机器。

我愿意:

gpg --export ${ID} > public.key
gpg --export-secret-key ${ID} > private.key
Run Code Online (Sandbox Code Playgroud)

将文件移动到新机器,然后:

gpg --import public.key
gpg: nyckel [ID]: public key [Name, e-mail] was imported
gpg: Total number of treated keys: 1
gpg:                 imported: 1  (RSA: 1)

gpg --allow-secret-key-import private.key
sec  [?]/[ID] [Creation date] [Name, e-mail]
ssb  [?]/[SUB-ID] [Creation date]
Run Code Online (Sandbox Code Playgroud)

对我来说一切都很好,但是:

$ gpg -d [file].gpg
gpg: encrypted with 4096-bit RSA-key, id [SUB-ID], created [Creation date]
  [Name, e-mail]
gpg: decryption failed: secret key not accessible
Run Code Online (Sandbox Code Playgroud)

因此,错误消息表明该文件已使用 [SUB-ID] 加密,密钥导入似乎表明已导入该文件。(两个消息中的 [SUB-ID] 是相同的)。

所以我显然做错了什么,但我不知道是什么。

Cel*_*ada 240

您需要添加--import到命令行以导入私钥。你不需要使用--allow-secret-key-import标志。根据手册页:“这是一个过时的选项,没有在任何地方使用。”

gpg --import private.key
Run Code Online (Sandbox Code Playgroud)

  • @Celeda,谢谢,使用 --edit-key 和 trust 命令,我设法让密钥受信任。由于我最初的问题是如何将密钥从一台机器复制到另一台机器,我认为在您的答案中添加一些关于此的内容是合适的。我不想自己编辑您的答案,而且您似乎比我了解的更多。 (4认同)

cmc*_*nty 136

以上只是部分答案。完整的答案是:

gpg --import private.key
Run Code Online (Sandbox Code Playgroud)

最后,验证密钥现在是否受信任,[ultimate]而不是[unknown]

gpg --list-keys
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。完整多了。 (14认同)
  • @Steiny 它使密钥受 [ultimate] 而不是 [unknown] 的信任。https://gpgtools.tenderapp.com/kb/faq/what-is-ownertrust-trust-levels-explained (4认同)

小智 8

我正在从具有旧版本 gpg 的备份导入。由于没有旧电脑,只有备份,所以不能先导出。这对我有用。

gpg --import old_home_dir/.gnupg/pubring.gpg
gpg --import old_home_dir/.gnupg/secring.gpg
Run Code Online (Sandbox Code Playgroud)

如果您希望能够在不立即输入密码的情况下导入密钥,请使用该--batch选项。

要验证公钥:

gpg --list-keys
Run Code Online (Sandbox Code Playgroud)

要验证密钥:

gpg --list-secret-keys
Run Code Online (Sandbox Code Playgroud)