でバックアップを自動化しようとしていますduplicity
が、結果をテストすると、
gpg: 公開鍵の復号化に失敗しました: パスフレーズが間違っています
使用しているパスフレーズが、実際に対応する gpg 秘密キーに関連付けられているパスフレーズであるかどうかを確認したいのですが、gpg のコマンドライン オプションに「何も暗号化または復号化しないでください。正しいパスフレーズを使用していることを確認するだけです。」という記述が見つかりません。
これは、おそらく私が (またしても) Gnu Privacy Guard を誤解している可能性を示唆しています。(私を泣かせるまで挑発する癖がある。)
gpg にパスフレーズの検証を依頼するのは意味がありますか? もしそうなら、どのようにしますか?
ベストアンサー1
これを行うための組み込みの方法はありませんが、何も変更せず、パスフレーズをチェックするだけのテストを作成するのは簡単です。
指定がなかったため、GnuPG バージョン v2 未満を使用しており、コマンドライン インタープリターとして Bash を搭載した Linux を使用しているものと想定します。
ここでコマンドを示し、以下で各部分が何をするかを説明します - (注: 以下は GnuPG シリーズ バージョン 1 用です。GnuPG シリーズ v2 については以下を参照してください)
echo "1234" | gpg --no-use-agent -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"
まず、署名するテキストを GnuPG にパイプしますecho "1234" |
。これは単なるテストであり、実際には何も署名したくないので、役に立たないテキストに署名します。
次に、 で gpg にキー エージェントを使用しないように指示します--no-use-agent
。これは後で重要になります。キー エージェントによっては、成功時に「0」を返さない可能性があり、これが私たちがやりたいこと、つまりパスフレーズが成功したかどうかを確認することだからです。
次に、署名されたデータをファイルに直接入れるように gpg に指示します/dev/null
。つまり、データを破棄し、結果を端末に書き込まないということです。 -- 注: Linux/Unix のバリアントを使用していない場合は、このファイルは存在しない可能性があります。Windows では、部分を省略して、署名されたデータを画面に書き込むようにする必要があるかもしれません-o /dev/null
。
次に、 を使用して、テストに使用するキーを指定します--local-user 012345
。 最大限の特定性を得るために KeyID を使用することも、ニーズに最適なユーザー名を使用することもできます。
次に、 を指定します-as
。これにより、ASCII 出力モードが有効になり、署名のコンテキスト モードが設定されます。-
その後の は、署名するデータを標準入力から取得するように GnuPG に指示するだけです。これは、 に指定したコマンドの最初の部分ですecho "1234" |
。
そして最後に、&& echo "A message that indicates success"
「&&」は、前のコマンドが成功した場合にこのメッセージを出力することを意味します。これは、上記のコマンドが成功したことがまったく出力されないことで示されてしまうため、わかりやすくするために追加されています。
何が起こっているのか、また、これを使用してテストを実行する方法をご理解いただくのに十分だと思います。不明な点や理解できない点があれば、喜んでご説明いたします。
[編集] - GnuPG v2 を使用している場合は、上記のコマンドを次のように少し変更する必要があります。
echo "1234" | gpg2 --batch --passphrase-fd 1 --local-user <KEYID> -as - > /dev/null && echo "The correct passphrase was entered for this key"
その理由は、GnuPG v2 では、パスフレーズがエージェント経由で取得されることを想定しているため、 を使用してエージェントの使用を無効にし--no-use-agent
て目的の効果を得ることができないためです。代わりに、GnuPG v2 に「バッチ」プロセスを実行するように指示し、オプション を使用して STDIN (標準入力) からパスフレーズを取得する必要があります--passphrase-fd 1
。
-o /dev/null
注意:文字デバイスを削除し、空のファイルに置き換えるので使用しないでください。