前言

前言

前言

作为一名程序员和加密爱好者,我对 gpg 和 ssh 的理解属于中等技术水平,但我对配置、字母汤规范等“琐事”、魔法变量和互操作等具体细节都不是很了解。我花了几个小时阅读指南和故障排除,并花了几年时间轻度使用 Linux 服务器,到目前为止我已经取得了很大进展,但现在我陷入了困境。

目标

要使用带有 1 个身份验证子密钥的主密钥来设置 gpg4win,这样我就可以通过gpg-agentgpg4win 使用密码提示在 git 和 ssh 中进行身份验证。

情况报告

Windows 10 PC,LAN 上的 Linux 服务器用于测试。ssh、putty、kitty 和 pageant 已设置好,可使用我的旧 gpg 密钥 + 派生的 putty 密钥。Kleopatra 显示一切正常,包括密码提示和 gpg-agent。gpg4win 3.1.7、gnupg 2.2.15、putty/kitty 0.71。

我使用 ECC (ed25519) 为自己生成了一个新的主密钥9B59,仅用于认证。生成了 2 个 ECC 子密钥(1 个用于加密,1 个用于认证+签名)。

AS 子项:

  • id =F3DC
  • 按键手柄 =3289...224A
  • gpg --export-ssh-key ...= ssh-ed25519 AAAAC3Nz... openpgp:0x6146F3DC

AS 子键 keygrip 添加到~\gnupg\sshcontrol, ssh 密钥添加到服务器的~/authorized_keys

gpg-agent使用 运行--enable-putty-support --enable-ssh-support。尝试运行pageant失败,并出现错误“pageant 已在运行”,表明 ssh 支持已在线(并且没有 pageant 实例正在运行)。

SSH_AUTH_SOCKenv var = C:\Users\me\AppData\Roaming\gnupg\S.gpg-agent.ssh。此文件存在,在 gpg-agent 启动时始终“最后修改于”,并且包含一些二进制 foobar。

gpg-connect-agent -r keyinfo_list.txt报告(以及其他关键内容):
S KEYINFO 3289...224A D - - - P - - -

此时尝试对我的 ssh 服务器进行身份验证却与我的预期相反,出现“不支持的身份验证方法(公钥)”的提示,并且没有通过 gpg4win 提示我输入密码。

在 Kleopatra 中执行强制加载密钥的操作后,先前的输出更改为,
S KEYINFO 3289...224A D - - 1 P - - -
因此我的 AS 子密钥F3DC已正确加载和缓存。

此时,使用“pageant”(= gpg-agent)通过 putty/kitty 进行身份验证仍然不起作用。

登录失败的putty事件日志显示:

Event Log: Pageant is running. Requesting keys.
Event Log: Pageant has 0 SSH-2 keys

为什么 gpg-agent 不提供使用我的 AS 子键,尽管它已在 gpg-agent 中加载、在 中设置sshcontrol并在我的 中列出authorized_keys

答案1

好吧,结果发现有两件事是错误的:

  1. sshcontrol对于行尾非常不确定,但没有说明(最后一行必须以行终止符结尾)
  2. 你必须启动 gpg-agent-connect--homedir <your gnupg folder>

相关内容