web-dev-qa-db-ja.com

GPG2は、-passphraseが指定されていてもパスワードを要求します

Gpg復号化のスクリプトを作成しようとしているため、コマンドラインでパスワードを指定する必要があります。マニュアルページによると、これを行うには3つの方法があります。--passphrase-fileを使用してファイルから読み取る、--passphrase-fd 0を使用してstdin(または別のファイル記述子)から読み取る、または--passphraseだけを使用してコマンドラインに含める。上記のすべてでも、--batchを設定する必要がありますが、これは私が行いました。

私の最近のコマンドラインの試みは次のとおりです。

echo "<password>" | gpg2 --no-tty --batch --passphrase-fd 0 -d -o /<path_to_destination>/$FILE_NAME $FILE

それでもパスワードを要求するダイアログがポップアップします。ここで何が欠けていますか?参考までに、違いが生じる場合、私のパスワードには&のようないくつかの特殊文字が含まれていますが、それについて不平を言っているようには見えません。また、gpgバージョンは2.1.9です。

# gpg2 --version
gpg (GnuPG) 2.1.9
libgcrypt 1.7.1
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: ~/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, Zip, ZLIB, BZIP2

編集: GPGにコンソールモードのピンエントリを使用してパスワードの入力を求める方法は? とは異なり、SSHセッションで使用するためにテキストベースのパスワードエントリを取得しようとしています。スクリプトで使用するためにGPGを使用する完全に非対話型の方法を取得します。

5
ibrewster

私はここで解決策を見つけました: https://wiki.archlinux.org/index.php/GnuPG#Unattended_pa​​ssphrase

簡単に言うと、最初に~/.gnupg/gpg-agent.confファイルに次の行を追加して、gpg-agentでピンエントリの「ループバック」モードを有効にする必要がありました。

allow-loopback-pinentry

次に、--pinentry-mode loopback引数をgpg2呼び出しに追加します

6
ibrewster