我正在将密钥从一台机器转移到另一台机器并执行以下操作:
在机器 A 上:
% gpg --export-secret-key -a [username] > my_private.key
Please enter the passphrase to export the OpenPGP secret key:
"[username and other data like email]"
2048-bit RSA key, ID [removed-ID],
created 2015-11-09.
Passphrase:
当我输入已知的正确密码时,出现错误:
*** Bad Passphrase (try 2 of 3) ***
Please enter the passphrase to export the OpenPGP secret key:
"[username and other data like email]"
2048-bit RSA key, ID [removed-ID],
created 2015-11-09.
Passphrase:
因此,我在解密期间也做了我发现的解决方法:只需按enter
gpg: key [removed-ID]: error receiving key from agent: No passphrase given - skipped
Please enter the passphrase to export the OpenPGP secret subkey:
"[username and other data like email]"
2048-bit RSA key, ID [removed-sub-ID],
created 2015-11-09 (main key ID [removed-ID]).
Passphrase:
这次它起作用了 - 无论是在解密时还是“起作用”(不会抛出错误)导出密钥。
现在我my_private.key
在机器A上。
我通过 SFTP 将文件传输到机器 B - 我省略了详细信息,因为我认为这不是问题所在......
在机器 B 上:
$ gpg --import my_private.key
gpg: Total number processed: 0
$
注意:它表示“0 已处理”。为什么?可以肯定的是,我可以这样做:
$ gpg --list-secret-keys
$
我究竟做错了什么?
笔记
这里可能有2个问题:
- 为什么正确的密码只有在通过第一个“主密钥”后才有效?
- 为什么导出的密钥无法导入?
更新:
在建议尝试过时的选项后--allow-secret-key-import
,我尝试了它并得到了以下结果:
$ gpg --allow-secret-key-import my_private.key
gpg: subkey w/o mainkey
gpg: standalone signature of class 0x18
gpg: Signature made Mon 09 Nov 2015 11:26:17 AM EST using RSA key ID [removed-ID]
gpg: invalid root packet for sigclass 18
gpg: Can't check signature: Invalid signature class
答案1
我发布的更新中的尝试告诉我,这里实际上有 2 个(私钥)密钥在起作用:一个主密钥和一个子密钥。他们是不同的。这篇文章帮助我更加了解了这个事实:https://wiki.debian.org/Subkeys
我仍然不知道我是如何进入主密钥与子密钥不同的密码来访问的状态的,但显然这就是为什么跳过主密钥并使用更改后的子密钥密码有效的原因。
幸运的是,我还保留着主人的密码,我以为我不久前已经更改过。使用它,我能够导出密钥、移动它并成功导入。