使用 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 直接写入 TTY 而不是 STDOUT 或 STDERR。这意味着它无法重定向。

您可以--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关联

答案2

添加该--batch选项。

如果您想通过重定向实现相同的结果,您必须通过以下方式关闭 STDIN:

gpg … <&-

答案3

联机gpg帮助页还列出了一个--no-tty选项:

--no-tty

确保 TTY(终端)从未用于任何输出。在某些情况下需要此选项,因为即使使用了 --batch,GnuPG 有时也会向 TTY 打印警告。

相关内容