ローカル マシンからリモート サーバーへのバックアップを設定しています。
ローカル マシンで 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 環境変数なしでコマンドを実行すると、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キーチェーンを使用する必要があります。duplicity--gpg-options "~user/.gnupg"
コマンドに次のように追加します。この回答に記載されている
もしかしたら、これは他の誰かの役に立つかもしれません:-)
答え3
gpg 2.1 を使用していますか? 使用している場合、パスフレーズを env var 経由で配信するには、duplicity と gpg にいくつかの追加パラメータが必要です。
https://lists.launchpad.net/duplicity-team/msg02653.html
あるいは、単に PASSPHRASE を設定しないと、gpg-agent が秘密を尋ねて記憶します。