标签: gpg-agent

如何重新启动 gpg-agent?

GnuPG 配置中的一些更改需要gpg-agent重新启动/重新启动(根据文档),但是...我该怎么做?我试过gpg-agent restart,,service gpg-agent restart但没有成功。

services gnupg gpg-agent

110
推荐指数
4
解决办法
9万
查看次数

gpg2:没有密钥

我已经使用 enigmail 一年多了,没有问题,今天它不起作用。

我发现了以下有趣的事实:

gpg --decrypt something.gpg # this works
gpg2 --decrypt something.gpg # this fails
Run Code Online (Sandbox Code Playgroud)

所以我的机器上的 gpg 版本 2 有问题。

这让我看到:

gpg --list-secret-keys # reads from ~/.gnupg/secring.gpg
gpg2 --list-secret-keys # reads from ~/.gnupg/pubring.gpg (pubring?!) 
Run Code Online (Sandbox Code Playgroud)

这似乎是问题的根源……当然gpg2找不到密钥,因为它在错误的文件中查找。

gpg2当我的gpg工作正常时,我怎么会失败?我没有看到任何用于指定从何处读取密钥的选项。

有人有任何想法吗?


对@grawity 的回应

谢谢,我很感激你的帮助。我跑了strace,我明白你在说什么。

但是,即使在gpg2 --import ...我看到行为没有差异之后。如果我重新启动(不启动 gpg-agent),运行gpg2 --import ...,然后运行,我只能让它工作gpg2 --decrypt ...。在那个序列之后,thunderbird + enigmail 也表现得很好。但是,大约 15 分钟后(我猜是我输入的解密密码已过期),然后gpg-agent又恢复到原来的行为。这个顺序是可重复的。

所以这里有一些输出,如果它有助于清除任何东西:

的输出gpg2 -K

/home/<username>/.gnupg/pubring.gpg
---------------------------------
sec   rsa4096/AAAAAAAA <date> …
Run Code Online (Sandbox Code Playgroud)

encryption gnupg gpg-agent

23
推荐指数
1
解决办法
3万
查看次数

如何在 GnuPG 中删除 Linux 上的子项?

我想在 GnuPG 中的 Linux (L)Ubuntu 16.04 上删除我的 OpenPGP 子项。这是一种“空白”无用的键(见下面的键33333333)。我没有上传到关键服务器,所以我认为删除而不撤销它是可以的。

gpg2 --edit-key me@example.com

sec  rsa4096/11111111
     created: 2016-12-12  expires: 2017-12-12  usage: SC  
     confiance : ultime        validity: ultimate
ssb  rsa4096/22222222
     created: 2016-12-12  expires: 2017-12-12  usage: E   
ssb  rsa4096/33333333
     created: 2016-12-12  expires: never       usage:     
ssb  rsa4096/44444444
     créé : 2016-12-12  expires: 2017-12-12  usage: S   
[  ultimate ] (1). me <me@example.com>
Run Code Online (Sandbox Code Playgroud)

我试过“gpg> delkey 33333333”,但我收到了这条消息:

You must select at least one key.
(Use the 'key' command.)
Run Code Online (Sandbox Code Playgroud)

然后gpg> key 33333333,我得到了这个结果(与list命令相同的结果):

sec  rsa4096/11111111 …
Run Code Online (Sandbox Code Playgroud)

linux encryption ubuntu gnupg gpg-agent

18
推荐指数
1
解决办法
9485
查看次数

我想让 pinentry 在本地使用 GUI 并在 SSH 上使用 CLI

我需要能够在两个不同的 Linux 环境中对 git 提交进行 GPG 签名。

  1. 在使用基于 GUI 的密码对话框的完整 GUI X-Window 设置中

  2. 在 SSH 中,没有 X 转发,仅使用命令行密码输入

在这两种情况下,我都需要能够使用不同的 UID 进行签名,所有这些都在我的密钥环中。本地和远程访问在一台计算机上使用相同的用户帐户,并且可能同时处于活动状态。该计算机运行 openSUSE Leap 15 (4.12.14),使用 GnuPG 2.2.11 和 libgcrypt 1.8.4。我典型的远程连接在 Android v5.1.1 上使用 ConnectBot v1.9.5,尽管我也经常在 iOS 12.1.1 上使用 Terminus v4.3.12,有时我也可以使用公共 Win 10 PC。

我不想要一个迫使我在本地使用 CLI 方法的“永久”解决方案。这样做会影响 gpg 的所有其他用途,包括电子邮件。

阅读这个问题,我尝试了几种似乎暗示自己的变体。尽管那里的解决方案,包括已接受的解决方案,都是为了永久解决方案。我希望他们能在我的用例中找到解决方案。

pinentry-command我已经尝试了在我的文件中设置的几种变体gpg-agent.conf。在所有情况下,该gpg-connect-agent reloadagent /bye命令都会在更改配置文件后执行。进行任何更改后,远程会话将按原样重新启动,并在执行以下每个命令后按顺序进行测试:

  1. export GPG_TTY=$(tty)
  2. unset DISPLAY
  3. gpg-connect-agent updatestartuptty /bye

三个命令前后的结果是相同的,如下所示:

  • 使用pinentry在本地提供 GUI 方法 - 无论我是在本地还是远程执行命令(远程屏幕只是挂起,直到对话框超时。)
  • 在所有情况下都使用pinentry-tty强制 CLI。(远程使用在远程终端中提示,本地使用在本地终端中提示。)
  • 使用pinentry-gtk-2 …

linux ssh terminal gnupg gpg-agent

11
推荐指数
1
解决办法
8377
查看次数

如何防止 gpg-agent 在密码收集期间超时?

gpg2在 CLI 脚本中调用本地文件的对称加密。它似乎gpg-agent通过一些 CLI、基于文本的 UI 提示输入密码。只要我在附近输入密码,一切正常。但是,如果我不是,它最终会失败并显示以下消息:

gpg-agent[15338]: command get_passphrase failed: Operation cancelled
gpg: cancelled by user
gpg: error creating passphrase: Operation cancelled
gpg: symmetric encryption of `XXXX.tar' failed: Operation cancelled
Run Code Online (Sandbox Code Playgroud)

有没有办法完全关闭这个超时?

我希望密码提示无限期地保留在屏幕上,直到我输入某些内容。

encryption gnupg gpg-agent

7
推荐指数
1
解决办法
9388
查看次数

无法在 arch linux 上使用 gpg 导入密钥

我是一个拱形 4.9.8-1 系统。我想为 gpu passthrough 安装 linux-vfio 内核并解决 IOMMU 组错误的问题。

尝试安装 linux-vfio 内核时,由于缺少密钥,出现以下错误。

$ yaourt -S linux-vfio
.
.
.
==> Verifying source file signatures with gpg...
    linux-4.9.tar ... FAILED (unknown public key 79BE3E4300411886)
    patch-4.9.8 ... FAILED (unknown public key 38DBBDC86092693E)
Run Code Online (Sandbox Code Playgroud)

我一直在尝试用 gpg 导入一个密钥,现在我尝试了很多不同的东西,但我一直遇到同样的错误,我用 pacman 安装了 gnupg 包。

$ gpg --recv-key 79BE3E4300411886
gpg: keyserver receive failed: Connection refused

$ gpg --keyserver pgp.mit.edu --recv-keys 79BE3E4300411886
gpg: keyserver receive failed: Connection refused
Run Code Online (Sandbox Code Playgroud)

检查服务器是否可用

$ gpg-connect-agent --dirmngr
> keyserver --resolve hkp://pool.sks-keyservers.net
S # …
Run Code Online (Sandbox Code Playgroud)

networking arch-linux debug gnupg gpg-agent

7
推荐指数
1
解决办法
1万
查看次数

GnuPG 2.2 拒绝密钥导入:“发送给代理时出错:操作已取消”

我正在尝试通过连接到具有密钥的计算机并运行来将我的 PGP 身份(包括密钥)导入到新计算机

ssh othercomputer cat myself.gpg | gpg2 --import
Run Code Online (Sandbox Code Playgroud)

执行此操作时,看起来 GPG 正在导入公钥,而不是私钥。当仔细检查输出时,我可以看到它显示“错误发送到代理:操作已取消”,我认为这与问题有关。

我有

  • 尝试指定一个pinentry-programin gpg-agent.conf;
  • 重新启动gpg-agent并三次检查它是否正在运行;和
  • 验证 gpg-agent 和 gpg 的版本是否匹配。

import gnupg gpg-agent

6
推荐指数
1
解决办法
6329
查看次数

gpg-agent:gpg-agent 已在运行 - 未启动新的 gpg-agent

尝试以仅输入密码一次的方式配置 gpg,它将在整个会话中起作用。

然而,这就是我得到的:

$ pgrep gpg-agent | wc 
      0       0       0

$ gpg-agent --daemon
gpg-agent: a gpg-agent is already running - not starting a new one

$ pgrep gpg-agent
26401
Run Code Online (Sandbox Code Playgroud)

即,gpg-agent --daemon将启动一个 gpg-agent,但忘记它随后就启动了一个,并阻止了自己。之后尝试了很多次gpgconf --kill gpg-agent,或者

kill `pgrep gpg-agent`
Run Code Online (Sandbox Code Playgroud)

结果总是一样的。

怎么了?

$ lsb_release -a 
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:        18.04
Codename:       bionic

# installed packages with KW of gpg:
gpg_2.2.4-1ubuntu1.2
gpg-agent_2.2.4-1ubuntu1.2
gpg-wks-client_2.2.4-1ubuntu1.2
gpg-wks-server_2.2.4-1ubuntu1.2
gpgconf_2.2.4-1ubuntu1.2
gpgsm_2.2.4-1ubuntu1.2
gpgv_2.2.4-1ubuntu1.2
Run Code Online (Sandbox Code Playgroud)

gnupg gpg-agent

6
推荐指数
1
解决办法
6980
查看次数

gpg2 运行速度过慢,仅当代理没有缓存密码时

最近,我的通行证密码管理器开始花费 45 秒以上的时间来显示主密码的 gpg-agent 密码提示,当我尝试登录网站并且必须坐在那里盯着密码时,这非常烦人提示一分钟。

我开始做一些测试,发现 gpg2 代理似乎有问题。当我运行 gpg1 时,没有配置任何代理,速度非常快(这包括输入密码的时间):

$ time gpg -vvv -d BitBucket.gpg
real    0m2.940s
user    0m0.024s
sys     0m0.004s
Run Code Online (Sandbox Code Playgroud)

但是当我对同一个文件运行 gpg2 (代理需要使用 gpg2)时,速度非常慢:

$ time gpg2 -vvv -d BitBucket.gpg
real    0m53.421s
user    0m0.000s
sys     0m0.004s
Run Code Online (Sandbox Code Playgroud)

然而,既然代理已经缓存了我的密码,速度又快了:

$ time gpg2 -vvv -d BitBucket.gpg
real    0m0.126s
user    0m0.004s
sys     0m0.000s
Run Code Online (Sandbox Code Playgroud)

这并不是解密速度慢——一旦密码提示最终出现,它就会在或多或少的正常时间内解密。只是代理需要很长时间才能加载并显示密码提示。

详细的日志不会产生任何有用的信息。输出如下所示(不相关和/或敏感信息替换为<angle-bracketed text>

$ gpg2 -vvv -d BitBucket.gpg
gpg: using character set 'utf-8'
<key parameters>
:pubkey enc packet: version 3, algo 1, keyid <X>
        data: …
Run Code Online (Sandbox Code Playgroud)

encryption gnupg gpg-agent

6
推荐指数
1
解决办法
2899
查看次数

同步 GnuPG 1.4 和 GnuPG 2.1 钥匙串

在新系统上将我的密钥导入 GnuPG 时,我考虑了以下几点:

  1. 是否可以同步 gpg 和 gpg2 (gpg2.1) 钥匙串?
  2. 这样做是否明智?

考虑

我找到了“GnuPG 1 和 GnuPG 2 彼此兼容吗?”的答案。,它说明了以下内容:

GnuPG 2.1 带来了一个重要的变化,它将以前分离的公共和私有密钥环(pubring.gpg 与 secring.gpg)结合到公共密钥环中。这已以保持兼容的方式实现,因此当 GnuPG 2.1 集成私钥环时,您仍然可以使用 GnuPG 1,但对私钥的更改不会显示为相应的其他实现。来自变更日志:
[...] 允许旧版 GnuPG 与 GnuPG 2.1 共存。但是,使用新 gpg 对私钥的任何更改在使用 2.1 之前的 GnuPG 版本时都不会显示,反之亦然。

文件级别的同步是没有选择的,似乎也没有内置的机制来同步链。

我是否可以安全地从 gpg 导出所有 pub 和 sec 密钥并通过 gpg2(cronjob 等)导入它们,反之亦然,或者这是否会给我带来未考虑的后果?

解决方案

我没有自动进行密钥同步,而是将所有密钥从我的 gpg 钥匙串转移到 gpg2 钥匙串并将 gpg2 符号链接到 gpg 以确保我始终使用 gpg2。这似乎是比将所有钥匙保存在不同钥匙圈中更好的解决方案。

gpg --export | gpg2 --import
gpg --export-secret-keys | gpg2 --import
sudo mv /usr/bin/gpg /usr/bin/gpg1
sudo ln …
Run Code Online (Sandbox Code Playgroud)

sync pgp gnupg openpgp gpg-agent

5
推荐指数
1
解决办法
2779
查看次数

标签 统计

gnupg ×10

gpg-agent ×10

encryption ×4

linux ×2

arch-linux ×1

debug ×1

import ×1

networking ×1

openpgp ×1

pgp ×1

services ×1

ssh ×1

sync ×1

terminal ×1

ubuntu ×1