web-dev-qa-db-ja.com

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_などのコマンドリダイレクトを使用しようとしていますが、パスフレーズのテキストは常に出力されます。このテキストを非表示にすることは可能ですか?

7
rsm

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

ダニエルが提案したように--batchオプションを使用できますが、より一般的なアプローチとしてscriptツールを使用できます、TTYを偽造します。その後、出力はすべて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リンク )を参照してください

7
binfalse

--batchオプションを追加します。

リダイレクトによって同じ結果を達成したい場合は、次の方法でSTDINを閉じる必要があります。

gpg … <&-
4
dan

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

--no-tty

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

0
Alex Altair