首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gpg/pinentry -不能在终端外输入密码

gpg/pinentry -不能在终端外输入密码
EN

Unix & Linux用户
提问于 2020-11-06 12:00:32
回答 1查看 953关注 0票数 1

我正在尝试解密脚本中的gpg文件。当我在终端中运行gpg -d file.gpg时,提示我在“诅咒”对话框中输入密码。但是,当我运行包含这一行的脚本时,我会得到"gpg:解密失败:没有秘密密钥“,或者如果不是从交互终端运行,则是无声的失败。

理想情况下,如果gpg试图从非交互式shell运行(我认为这是我的意思,但我不确定--基本上是从脚本运行),当我运行X时,我希望它打开一个运行pinentry-curses的终端窗口。

如果我将我的定位程序设置为使用qt或gtk运行,那么每次都会弹出一个图形窗口,不管它来自何处。这就是我想要复制的行为--我只是不希望它依赖于qt或gtk。

EN

回答 1

Unix & Linux用户

发布于 2020-11-07 18:56:03

我可以为您提供一些解决方案的方法,假设是gpg2,并且请注意,我没有声明安全性等等。

预先创建一个为输入密码预留的终端。在它中给出两个命令:

代码语言:javascript
复制
tty
gpg-agent --pinentry-program /usr/bin/pinentry-curses --daemon sleep 999999

这将打印正在使用的pty,例如/dev/pts/10,然后运行gpg代理,该代理将在sleep中“挂起”,以便在此终端中不再进行读取。

当您需要解密其他shell中的某个内容时,首先用以下方法设置它的环境:

代码语言:javascript
复制
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解密命令中。它应该会导致定位程序的诅咒版本出现在预先创建的终端中,在那里您现在可以输入密码。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/618341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档