pass 和 gpg:没有公钥

shv*_*ved 23 gpg password-store

我使用通行证已经很长时间了;但是在将我的密钥存储和 gpg 密钥导出到另一台机器后,我看到以下输出:

$ gpg --list-key
/home/shved/.gnupg/pubring.gpg
------------------------------
pub   2048R/FA829B53 2015-04-28
uid       [ultimate] Yury Shvedov (shved) <shved@lvk.cs.msu.su>
sub   2048R/74270D4A 2015-04-28
Run Code Online (Sandbox Code Playgroud)

我的密钥已导入并受信任,但无法使用:

pass insert test
Enter password for test: 
Retype password for test: 
gpg: 2048R/FA829B53: skipped: No public key
gpg: [stdin]: encryption failed: No public key
fatal: pathspec '/home/shved/.password-store/test.gpg' did not match any files
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能再次使用我的密钥?

小智 15

pass使用 gnupg2,它不与 gnupg 1.x 共享它的密钥环。

使用 gnupg2 而不是 gnupg 再次导入您的密钥。如果您已经在目标机器上的 gnupg 中拥有您的密钥,请运行:

$ gpg --export-secret-keys > keyfile
$ gpg2 --import keyfile
Run Code Online (Sandbox Code Playgroud)

导入后,您可能需要更新对密钥的信任。Secret key is available.如果导入成功,您应该会看到一条消息:

$ gpg2 --edit-key FA829B53
[...]
Secret key is available.

sec  rsa4096/FA829B53
     created: 2015-03-14  expires: 2017-03-13  usage: SC  
     trust: unknown      validity: ultimate
ssb  rsa4096/74270D4A
     created: 2015-03-14  expires: 2017-03-13  usage: E   
[ultimate] (1). Yury Shvedov (shved) <shved@lvk.cs.msu.su>
Run Code Online (Sandbox Code Playgroud)

现在更新对您的密钥的信任:

gpg> trust
[...]
Your decision? 5
Do you really want to set this key to ultimate trust? (y/N) y
[...]
gpg> save
Run Code Online (Sandbox Code Playgroud)


And*_*riy 8

输出线

gpg: 2048R/FA829B53: skipped: No public key
Run Code Online (Sandbox Code Playgroud)

显示错误的pass初始化。您pass使用命令进行了初始化,pass init 2048R/FA829B53而您应该使用命令进行初始化pass init FA829B53。要解决此问题,您应该将文件内容~/.password-store/.gpg-id2048R/FA829B53toFA829B53更改为并提交更改。

聚苯乙烯

@?ukasz Lis 的所有建议都是正确的,您也应该完成它们。在其他情况下,您将无法解密通行证:

$ pass -c test
Run Code Online (Sandbox Code Playgroud)

会给你一个错误: gpg: decryption failed: No secret key