web-dev-qa-db-ja.com

重複復元の失敗:秘密鍵がありません

ローカルマシンからリモートサーバーへのバックアップを設定しています。
ローカルマシンでgpgキーを生成し、次のコマンドでテストバックアップを実行しました。

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

バックアップは正常に機能しているようです。サーバー上に3つのファイルが作成されます。

私の問題は、復元を機能させることができないことです。
ローカルマシン上のテストファイルを削除し、次のコマンドで復元しようとしました。

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がリストされます。キーリングに記載されているキーがありません。

6
Pabi

問題は、リンクされた投稿で述べられているように、gpg2.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を使用してエージェントを再起動します。

キーがローカルマシン上にある場合でも、復元は機能します。ただし、インクリメンタルを作成するときにパスフレーズを要求しない理由はまだわかりません。

5
Pabi

Sudoを使用してduplicityを実行すると、この問題が発生しました。これにより、rootのホームディレクトリで秘密鍵が検索されます。秘密鍵が見つからない場合、「秘密鍵がありません」というエラーが表示され、少なくとも私にとっては、その理由がすぐにはわかりませんでした。

この問題の最も簡単な解決策は、私の場合、宛先ディレクトリに正しいアクセス許可を設定することにより、Sudoの使用を回避することでした。

Sudoが必須の場合は、適切なGPGオプションを設定して、ユーザーのGPGキーチェーンを使用するようにする必要があります。adding--gpg-options "~user/.gnupg" duplicityコマンドに この回答に記載

多分これは他の誰かを助けます:-)

1
Pablo

Gpg 2.1を使用していますか?はいの場合、env varを介してパスフレーズを配信する場合は、duplicityとgpgにいくつかの追加パラメーターが必要です。
https://lists.launchpad.net/duplicity-team/msg02653.html

または、PASSPHRASEを設定しないでください。gpg-agentが要求し、秘密を記憶します。

1
ede