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에 경고를 인쇄하기 때문에 이 옵션이 필요한 경우가 있습니다.

관련 정보