bashコマンドを使用してGnuPGパスワード要求をサイレントします。

bashコマンドを使用してGnuPGパスワード要求をサイレントします。

gnupgコマンドの「出力」を隠そうとしていますが、常に印刷されているようです。

コマンドは次のとおりです。

echo "thisprogramwørks" | gpg -q --status-fd 1 --no-use-agent --sign --local-user D30BDF86 --passphrase-fd 0 --output /dev/null

以下は、pgpキーのパスワードを確認して使用するコマンドです。

a=$(echo "thisprogramwørks" | gpg -q --status-fd 1 --no-use-agent --sign --local-user D30BDF86 --passphrase-fd 0 --output /dev/null)

出力を復元します。

echo $a [GNUPG:] USERID_HINT F02346C1EA445B6A p7zrecover (7zrecover craking pgp test) <a@a> [GNUPG:] NEED_PASSPHRASE F02346C1EA445B6A F02346C1EA445B6A 1 0 [GNUPG:] GOOD_PASSPHRASE [GNUPG:] BEGIN_SIGNING [GNUPG:] SIG_CREATED S 1 8 00 1435612254 8AE04850C3DA5939088BE2C8F02346C1EA445B6A

問題は、コマンドを使用すると、コンソールに次のものが印刷されることです。

You need a passphrase to unlock the secret key for user: "test (test) <a@a>" 1024-bit RSA key, ID EA445B6A, created 2015-06-29

コマンドリダイレクトなどの機能を試しましたが、&>/dev/null常にパスワードテキストが印刷されます。このテキストを非表示にできますか?

答え1

「問題」は、gpgがSTDOUTまたはSTDERRの代わりにTTYに直接書き込むということです。つまり、リダイレクトできません。

--batchDanielが提案したように、そのオプションを使用できますが、より一般的なアプローチこのツールを使用すると、scriptTTYを偽造することができます。これにより、すべての出力がSTDOUTに送信されるため、次にリダイレクトできます/dev/null

script -c 'echo "thisprogramwørks" | gpg -q --status-fd 1 --no-use-agent --sign --local-user D30BDF86 --passphrase-fd 0 --output /dev/null' > /dev/null

出力はファイルにも書き込まれるため、引き続きインポートして分析できます。バラよりman script協会)

答え2

この--batchオプションを追加してください。

リダイレクトで同じ結果を得るには、次のようにSTDINを閉じる必要があります。

gpg … <&-

答え3

マンページにはgpg次のオプションもリストされています--no-tty

--no-tty

TTY(ターミナル)がどの出力にも使用されないようにしてください。 --batchを使用してもGnuPGはTTYに警告を出力するため、このオプションが必要な場合があります。

関連情報