Duplicity 恢复失败:没有密钥

Duplicity 恢复失败:没有密钥

我正在设置从本地计算机到远程服务器的备份。
我在本地计算机上生成了 gpg 密钥,并使用以下命令运行了测试备份:

PASSPHRASE="MyGPGPassphrase" duplicity --encrypt-key KeyID test scp://user@server/path

备份似乎工作正常,在服务器上创建了三个文件。

我的问题是无法恢复。
我删除了本地计算机上的测试文件,并尝试使用以下命令恢复它:

PASSPHRASE="MyGPGPassphrase" duplicity --encrypt-key KeyID scp://user@server/path test

我收到以下错误:

Synchronizing remote metadata to local cache...
Copying duplicity-full-signatures.20151011T011134Z.sigtar.gpg to local cache.
GPGError: GPG Failed, see log below:
===== Begin GnuPG log =====
gpg: encrypted with 2048-bit RSA key, ID KeyID(of ssb), created 2015-10-11
"Name <email>"
gpg: public key decryption failed: Inappropriate ioctl for device
gpg: decryption failed: No secret key
===== End GnuPG log =====

我使用以下命令在本地机器上导出 gpg 密钥:
gpg --export-secret-key KeyID > secret.key
gpg --armor --export KeyID > public.key

并使用以下命令将其导入服务器:
gpg --import secret.key
gpg --import public.key

为了使恢复工作顺利进行,还需要做什么吗?

编辑:
如果我在没有 PASSPHRASE 环境的情况下执行命令,则duplicity --encrypt-key Key D test scp://user@host/path无论如何都会创建备份而无需输入密码。

输出file duplicity-full.20151011T115714Z.vol1.difftar.gpg列出了与 --encrypt-key 中指定的不同的 KeyID。我的密钥环中没有列出的密钥。

答案1

问题在于,就像链接的帖子所述,gpg 2.1 从管道中撤回了密钥认证的密码。
需要启用和配置 gpg 代理才能使恢复正常工作。

添加以下内容~/.gnupg/gpg.conf

use-agent
pinentry-mode loopback

并致您的~/.gnupg/gpg-agent.conf

pinentry-program /usr/bin/pinentry-gtk-2
allow-loopback-pinentry

然后使用 重新启动代理echo RELOADAGENT | gpg-connect-agent

即使密钥仅在本地机器上,恢复仍可进行。不过,我还是不明白为什么在进行增量恢复时不要求输入密码。

答案2

sudo我在使用执行时遇到过这个问题duplicity,它使它在 的主目录中搜索私钥root。没有找到私钥,出现“无密钥”错误,至少对我来说,我并不清楚原因。

解决此问题最简单的方法是避免使用sudo,就我而言,是通过在目标目录上设置正确的权限。

如果sudo必须,则需要设置适当的 GPG 选项,以便它使用用户的 GPG 钥匙串:添加--gpg-options "~user/.gnupg"到 duplicity 命令中,如下所示在这个答案中说明

也许这对其他人有帮助:-)

答案3

您使用的是 gpg 2.1 吗?如果是,如果您想通过 env var 传递密码,duplicity 和 gpg 需要一些额外的参数。
https://lists.launchpad.net/duplicity-team/msg02653.html

或者,干脆不设置密码,gpg-agent 就会询问您并为您记住密码。

相关内容