口是心非恢復失敗:沒有密鑰

口是心非恢復失敗:沒有密鑰

我正在設定從本地電腦到遠端伺服器的備份。
我在本機電腦上產生了 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 env 的情況下執行命令,duplicity --encrypt-key Key D test scp://user@host/path則無論如何都會建立備份,而無需詢問密碼。

的輸出file duplicity-full.20151011T115714Z.vol1.difftar.gpg列出了與 --encrypt-key 中指定的 KeyID 不同的 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我在使用toexecute時遇到了​​這個問題,這使得它在的主目錄duplicity中搜尋私鑰。root沒有找到私鑰,出現“無密鑰”錯誤,並且 - 至少對我來說 - 並不清楚原因。

解決此問題的最簡單的解決方案是sudo透過在目標目錄上設定正確的權限來避免使用 。

如果sudo是必須的,則需要設定適當的 GPG 選項,以便它使用使用者的 GPG 鑰匙圈:新增--gpg-options "~user/.gnupg"至 duplicity 指令,如下在這個答案中指出

也許這對其他人有幫助:-)

答案3

你用的是gpg 2.1嗎?如果是,如果您想透過環境變數傳遞密碼,口是心非和 gpg 需要一些額外的參數。
https://lists.launchpad.net/duplicity-team/msg02653.html

或者,只需不設定 PASSPHRASE,gpg-agent 就會詢問您並為您記住密碼。

相關內容