如何使用Gnupg的passphrase-fd参数?

Bla*_*ird 29 gnupg

我想在decrypt没有任何用户交互的情况下使用GnuPG的命令.脚本的--passphrase-fd论点似乎正是我所需要的.但我不知道它是如何工作的 - 没有找到例子.

在Windows和UNIX环境下,有人能给我一个这样的命令的例子吗?

(仅供参考,我正在使用GnuPG 2).

谢谢你:)

kyl*_*uff 38

--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...
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,密码是通过文件描述符0(STDIN)提供的 - 我们通过在shell当前标准输入上输入它来提供.

在下一个例子中,我们将告诉GnuPG从输入中检索密码短语到当前shell,它实际上是另一个命令的输出(echo,在这种情况下,它只是"回声"你告诉它的内容):

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...
Run Code Online (Sandbox Code Playgroud)

另一个将包含密码的文件内容转储到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...
Run Code Online (Sandbox Code Playgroud)

总而言之,--passphrase-fd只是告诉GnuPG你想通过标准文件描述符为它提供必要的密码短语; GnuPG v2和GnuPG之间的区别仅仅是--batch参数.

上面的例子应该工作一样在Windows和*nix的环境,唯一的区别是,在Windows中-根据您的配置和版本-你将不得不更换cattype以转储文件STDIN的内容.


Jod*_*ger 21

kylehuff的回答仍然不适合我,gpupg仍然弹出密码提示.

根据https://wiki.archlinux.org/index.php/GnuPG#Unattended_pa​​ssphrase和gnupg 2.1.0及更高版本,您需要执行其他步骤来支持--passphrase-fd

首先,编辑gpg-agent配置以允许环回pinentry模式:〜/ .gnupg/gpg-agent.conf

allow-loopback-pinentry
Run Code Online (Sandbox Code Playgroud)

如果正在运行,请重新启动gpg-agent进程以使更改生效.

其次,要么需要更新应用程序以包含命令行参数以使用环回模式,如下所示:

$ gpg --pinentry-mode loopback ...
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你,谢谢你,谢谢你,谢谢你,谢谢你!我已经为此奋斗了几个小时,直到我得到你的答复,才提到我需要这样做! (2认同)

小智 5

使用GPG4win / gpg 2.2.3:要使用passphrase-fd 0和跳过提示,我可以确认以下各项有效:

--pinentry-mode loopback
Run Code Online (Sandbox Code Playgroud)