前言
作为一名程序员和加密爱好者,我对 gpg 和 ssh 的理解属于中等技术水平,但我对配置、字母汤规范等“琐事”、魔法变量和互操作等具体细节都不是很了解。我花了几个小时阅读指南和故障排除,并花了几年时间轻度使用 Linux 服务器,到目前为止我已经取得了很大进展,但现在我陷入了困境。
目标
要使用带有 1 个身份验证子密钥的主密钥来设置 gpg4win,这样我就可以通过gpg-agent
gpg4win 使用密码提示在 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_SOCK
env 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
好吧,结果发现有两件事是错误的:
sshcontrol
对于行尾非常不确定,但没有说明(最后一行必须以行终止符结尾)- 你必须启动 gpg-agent-connect
--homedir <your gnupg folder>