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

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

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

我愿意:

gpg --export ${ID} > public.key
gpg --export-secret-key ${ID} > private.key

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

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]

一切对我来说看起来都不错,但是:

$ 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

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

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

答案1

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

gpg --import private.key

答案2

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

gpg --import private.key
  • FA0339620046E260给定输出中的KEYID(例如):

      gpg --edit-key {KEY} trust quit
      # enter 5<RETURN> (I trust ultimately)
      # enter y<RETURN> (Really set this key to ultimate trust - Yes)
    
  • 或者使用下面的自动命令:

      expect -c 'spawn gpg --edit-key {KEY} trust quit; send "5\ry\r"; expect eof'
    

最后,核实现在该密钥已被信任,[ultimate]而不是[unknown]

gpg --list-keys

答案3

我从具有旧版本 gpg 的备份导入。由于旧电脑不可用,只有备份,所以我无法先导出它。这对我有用。

gpg --import old_home_dir/.gnupg/pubring.gpg
gpg --import old_home_dir/.gnupg/secring.gpg

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

验证公钥:

gpg --list-keys

要验证密钥:

gpg --list-secret-keys

相关内容