我正在尝试解密脚本中的gpg文件。当我在终端中运行gpg -d file.gpg时,提示我在“诅咒”对话框中输入密码。但是,当我运行包含这一行的脚本时,我会得到"gpg:解密失败:没有秘密密钥“,或者如果不是从交互终端运行,则是无声的失败。
理想情况下,如果gpg试图从非交互式shell运行(我认为这是我的意思,但我不确定--基本上是从脚本运行),当我运行X时,我希望它打开一个运行pinentry-curses的终端窗口。
如果我将我的定位程序设置为使用qt或gtk运行,那么每次都会弹出一个图形窗口,不管它来自何处。这就是我想要复制的行为--我只是不希望它依赖于qt或gtk。
发布于 2020-11-07 18:56:03
我可以为您提供一些解决方案的方法,假设是gpg2,并且请注意,我没有声明安全性等等。
预先创建一个为输入密码预留的终端。在它中给出两个命令:
tty
gpg-agent --pinentry-program /usr/bin/pinentry-curses --daemon sleep 999999这将打印正在使用的pty,例如/dev/pts/10,然后运行gpg代理,该代理将在sleep中“挂起”,以便在此终端中不再进行读取。
当您需要解密其他shell中的某个内容时,首先用以下方法设置它的环境:
export GPG_TTY=/dev/pts/10
export GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1其中1000是您的用户id。(您可以通过使用选项gpg-agent启动-v来获取这个套接字的名称。我相信有更干净的方法可以得到它。)
注意在信息末尾添加的:0:1;它确实应该是代理和协议版本的pid,但是0似乎被接受了。(如果套接字不在上面的路径名上,则可能不使用gpg2,或者在配置文件中设置了一些选项)。
现在还必须将选项--use-agent添加到gpg解密命令中。它应该会导致定位程序的诅咒版本出现在预先创建的终端中,在那里您现在可以输入密码。
https://unix.stackexchange.com/questions/618341
复制相似问题