为了--passphrase-fd
在 GnuPG v2 中使用 gpg 选项,您必须指定--batch
参数。我将首先解释其--passphrase-fd
工作原理,然后介绍示例。
--passphrase-fd
告诉 GnuPG期望密码来自哪个文件描述符(-fd)。标准文件描述符是 STDIN (0)、STDOUT (1) 和 STDERR (2)。对于这个问题的上下文,您通常只关心 STDIN (0)。
您没有指定密码的来源,因此我将以各种方式演示 STDIN(标准输入)的用法。
--passphrase-fd 0
告诉 GnuPG 从当前 shell 的输入中检索密码;因此,例如,如果您希望 GnuPG 在控制台输入的下一行中获取密码数据,则命令和输出将如下所示:
gpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgp
<next line of input is passphrase followed by hitting enter>
gpg: encrypted with 1024-bit RSA key, ID EC18C175, created 2013-10-26
"testkey4321 (4321) <test@4321.com>"
this is a test... this is only a test...
在上面的示例中,密码短语是通过文件描述符 0 (STDIN) 提供的——我们通过在 shell 当前标准输入中输入它来提供。
在下一个示例中,我们将告诉 GnuPG 从当前 shell 的输入中检索密码短语,该密码实际上是另一个命令的输出(在这种情况下,它只是“回显”你告诉它的内容):
echo "mypassphrase" | gpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgp
gpg: encrypted with 1024-bit RSA key, ID EC18C175, created 2013-10-26
"testkey4321 (4321) <test@4321.com>"
this is a test... this is only a test...
另一个将包含密码短语的文件内容转储到 STDIN 的示例 -
cat /path/to/file_with_passphrase | gpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgp
gpg: encrypted with 1024-bit RSA key, ID EC18C175, created 2013-10-26
"testkey4321 (4321) <test@4321.com>"
this is a test... this is only a test...
总之,--passphrase-fd
只需告诉 GnuPG 你想通过标准文件描述符向它提供必要的密码;GnuPG v2 和 GnuPG 之间的区别仅仅是--batch
参数。
上面的例子在 Windows 和 *nix 环境中应该是一样的,唯一的区别是在 Windows 中——取决于你的配置和版本——你必须替换cat
为type
以便将文件的内容转储到 STDIN。