如何在CLI上使用gpg提示密码短语

时间:2013-07-21 06:53:03

标签: command-line-interface gnupg passphrase

gnuPG软件包gpg的加密工具在普通用户调用时会使用GUI对话框提示密码,但是当root用户调用它时会在CLI上提示。即使在普通用户调用时,如何使用CLI。  版本:GnuPG 1.4.12

7 个答案:

答案 0 :(得分:12)

这种密码提示不是由gpg本身完成的,而是由gpg-agent完成的。​​

您可以配置gpg-agent应该使用哪个pinentry程序。启动代理和gpg-agent配置文件时都有选项 - 请查看手册页。

所以我看到两个选择:

  • 配置gpg-agent以使用所需的方法
  • 禁用gpg-agent;您可以通过取消设置GPG_AGENT_INFO之类的环境变量GPG_AGENT_INFO="" gpg ...来为单个gpg调用执行此操作。 gpg曾经有一个--no-use-agent选项,但是已被标记为已弃用且在最近的gpg版本中没有任何功能。

答案 1 :(得分:2)

在Debian盒子上:

sudo apt install pinentry-tty
sudo update-alternatives --config pinentry

(并将其设置为pinentry-tty)

答案 2 :(得分:1)

在较新版本的gpg> = 2.x中,您可以使用此

stty -echo; gpg --passphrase-fd 0 --pinentry-mode loopback --decrypt filename; stty echo

样式可以确保输入密码时不会回显您的密码。 如果您只想快速进入要登录的台式机工作站,则比尝试摆弄配置还顺手。

不过,您将需要sudo apt install pinentry-curses或可能的sudo apt install pinentry

这与gpg 1.x的旧时代相去甚远,在gpg 1.x中,您所需要的只是--no-use-agent

答案 3 :(得分:0)

您可以设置以下环境变量以禁用图形提示

export PINENTRY_USER_DATA="USE_CURSES=1"

答案 4 :(得分:0)

如果您使用的是MacOS,并且使用pinentry,则可以转到?> System Preferences> GPG Suite,然后同时禁用两者

Store in macOS keychain

Remember for ### seconds

然后单击Delete stored OpenPGP passwords按钮。

删除OpenPGP密码部分非常重要,因为如果您的密码已经存储在钥匙串中,则禁用其他2个选项是不够的!

我尝试了此线程上提到的大多数其他事情,包括使用export GPG_TTY=$(tty)~/.bash_profile添加到gpg --no-use-agent(得到了不赞成使用的消息,但仍然没有用), ~/.gnupg/gpg-agent.conf~/.gnupg/gpg.conf文件(没有一个文件看起来确实可以更改任何文件),在我这样做之前,没有任何东西使CLI pinentry GUI提示输入密码。

希望这可能对将来遇到此问题的任何人有所帮助!我花了几个月的时间更新gpg并意外启用了这些选项,然后才弄清楚如何立即将它们还原。

为澄清起见,如果您想通过PGP密钥在进行任何想验证的操作时提示您输入密码,请确保没有选择记住已启用密码的选项,并确保您将删除可能存储在macOS钥匙串中的所有PGP密码。

编辑:在“不同问题:How to use GUI pinentry program for GPG

上找到了类似的答案

答案 5 :(得分:0)

我的要求是通过 SSH 连接在远程服务器中创建密钥。

<块引用>

我的要求不是编写所有内容

没有人提到这种方法。但它对我有用并且满足我的要求:

  1. 在 X11 (UI) 可用的机器上创建密钥
gpg2 --gen-key

...output omitted...
Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) Enter
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) Enter
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: Abd Tm
Email address: abd@example.com
Comment: Enter
You selected this USER-ID:
    "Abd Tm <abd@example.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
  1. 导出密钥:
# export private key
gpg2 --export-secret-keys --armor --output myfile abd@example.com

# export public key (same command above except --export arg)
gpg2 --export --armor --output myfile.pub abd@example.com

  1. 将 2 个文件复制到我真正要安装密钥的服务器:
scp myfile* user@remote-server:/home/user
  1. SSH 到远程服务器并导入密钥
ssh user@remote-server

[user@remote-server] $ gpg2 --import /home/user/myfile
[user@remote-server] $ gpg2 --import /home/user/myfile.pub

  1. 验证它是否有效:
[user@remote-server] $ gpg2 --list-keys

归功于 this article

答案 6 :(得分:-2)

你可以这样做:

gpg --batch --decrypt --passphrase-fd 0 gpgfile < passphrase-file