GnuPG 配置中的一些更改需要gpg-agent重新启动/重新启动(根据文档),但是...我该怎么做?我试过gpg-agent restart,,service gpg-agent restart但没有成功。
我已经使用 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) 我想在 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 环境中对 git 提交进行 GPG 签名。
在使用基于 GUI 的密码对话框的完整 GUI X-Window 设置中
在 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命令都会在更改配置文件后执行。进行任何更改后,远程会话将按原样重新启动,并在执行以下每个命令后按顺序进行测试:
export GPG_TTY=$(tty)unset DISPLAYgpg-connect-agent updatestartuptty /bye三个命令前后的结果是相同的,如下所示:
pinentry在本地提供 GUI 方法 - 无论我是在本地还是远程执行命令(远程屏幕只是挂起,直到对话框超时。)pinentry-tty强制 CLI。(远程使用在远程终端中提示,本地使用在本地终端中提示。)pinentry-gtk-2 …我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)
有没有办法完全关闭这个超时?
我希望密码提示无限期地保留在屏幕上,直到我输入某些内容。
我是一个拱形 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) 我正在尝试通过连接到具有密钥的计算机并运行来将我的 PGP 身份(包括密钥)导入到新计算机
ssh othercomputer cat myself.gpg | gpg2 --import
Run Code Online (Sandbox Code Playgroud)
执行此操作时,看起来 GPG 正在导入公钥,而不是私钥。当仔细检查输出时,我可以看到它显示“错误发送到代理:操作已取消”,我认为这与问题有关。
我有
pinentry-programin gpg-agent.conf;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) 最近,我的通行证密码管理器开始花费 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) 在新系统上将我的密钥导入 GnuPG 时,我考虑了以下几点:
我找到了“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) 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