如何更改 pass 密码存储的 GPG 密钥

可以使用pass作为密码管理器来存储密码。
从手册中不清楚的一点是是否可以轻松更改使用的gpg密钥。初始化密码存储时需要一个gpg密钥,但如果密钥过时了,我想知道该怎么办。
是否有一种方便的方法可以使用另一个密钥解密和重新加密密码管理器中存储的所有密码?
1个回答

使用pass init [-p path] <gpg-id>命令,其中<gpg-id>指定了您想要用于加密密码的新GPG密钥。根据pass man page

如果指定的gpg-id与任何现有文件中使用的密钥不同,则这些文件将重新加密以使用新的ID。

这似乎至少在pass 1.6.5版本中有效。请注意,您需要访问旧的GPG私钥才能解密并重新加密您的密码。

注意事项1

如果您的任何pass目录无法使用新密钥重新加密,可能是因为它具有覆盖password-store目录顶层指定的gpg-id的.gpg-id文件。我不会在这个问题中详细介绍如何解决这个问题,因为这可能会偏离主题,但我可以说pass手册对此进行了很好的解释。

注意事项2

如果您的~/.password-store目录是一个git仓库(即,您曾经运行过pass git init),请注意旧的加密信息将保留在git仓库的提交历史中;如果您担心可能被入侵的gpg密钥,那么您应该采取必要的措施来清除git历史记录。


对于本主题的观众们,请不要像@maxschlepzig建议的那样行事——这可能会永久删除您所有的密码(假设您没有将其备份到git远程)。 - Wayne Warren
无论是你想要摆脱密码历史(例如在旧密钥被泄露后)还是不想要,都可以。如果你不想要,那就不要删除git目录。当然,始终要有可用的工作备份。 - maxschlepzig
如果您没有旧的GPG私钥的密码,该怎么办? - Jake Stevens-Haas
@JakeStevens-Haas,这超出了我的理解范围,除了指出像这样使用加密密码存储的主要优势是防止没有gpg私钥密码的人访问所有其他密码之外,我无法提供更多信息。 - Wayne Warren