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에 직접 쓴다는 것입니다. 즉, 리디렉션할 수 없습니다.
--batch
Daniel이 제안한 대로 해당 옵션을 사용할 수 있지만보다 일반적인 접근 방식이 도구를 사용하면 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
(협회)
답변2
이 --batch
옵션을 추가하세요.
리디렉션으로 동일한 결과를 얻으려면 다음을 통해 STDIN을 닫아야 합니다.
gpg … <&-
답변3
맨페이지에는 gpg
다음 옵션도 나열되어 있습니다 --no-tty
.
--no-tty
TTY(터미널)가 어떤 출력에도 사용되지 않도록 하세요. --batch가 사용되는 경우에도 GnuPG가 때때로 TTY에 경고를 인쇄하기 때문에 이 옵션이 필요한 경우가 있습니다.