You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2中用YubiKey的GPG密钥实现Git认证报错求助

WSL2中YubiKey GPG密钥作为SSH密钥认证Git服务器的问题解决

环境配置

YubiKey Manager (ykman) version: 5.1.1
How was it installed?: Using Yubico's PPA (Ubuntu)
Operating system and version: WSL2; 1.2.5.0; Windows version: 10.0.22621.819 (Ubuntu distro)
YubiKey model and version: YubiKey 5 NFC (5.4.3)

当前配置

已在WSL中安装socat和wsl2-ssh-pageant,并在~/.bashrc中添加以下套接字同步配置:

config_path="C\:/Users/<YOUR_USER>/AppData/Local/gnupg"
wsl2_ssh_pageant_bin="$HOME/.ssh/wsl2-ssh-pageant.exe"
# SSH Socket
# Removing Linux SSH socket and replacing it by link to wsl2-ssh-pageant socket
export SSH_AUTH_SOCK="$HOME/.ssh/agent.sock"
if ! ss -a | grep -q "$SSH_AUTH_SOCK"; then
  rm -f "$SSH_AUTH_SOCK"
  if test -x "$wsl2_ssh_pageant_bin"; then
    (setsid nohup socat UNIX-LISTEN:"$SSH_AUTH_SOCK,fork" EXEC:"$wsl2_ssh_pageant_bin" >/dev/null 2>&1 &)
  else
    echo >&2 "WARNING: $wsl2_ssh_pageant_bin is not executable."
  fi
fi
# GPG Socket
# Removing Linux GPG Agent socket and replacing it by link to wsl2-ssh-pageant GPG socket
export GPG_AGENT_SOCK="$HOME/.gnupg/S.gpg-agent"
if ! ss -a | grep -q "$GPG_AGENT_SOCK"; then
  rm -rf "$GPG_AGENT_SOCK"
  if test -x "$wsl2_ssh_pageant_bin"; then
    (setsid nohup socat UNIX-LISTEN:"$GPG_AGENT_SOCK,fork" EXEC:"$wsl2_ssh_pageant_bin --gpgConfigBasepath ${config_path} --gpg S.gpg-agent" >/dev/null 2>&1 &)
  else
    echo >&2 "WARNING: $wsl2_ssh_pageant_bin is not executable."
  fi
fi

问题描述

gpg --card-status可正常显示YubiKey信息,且已通过gpg --card-edit配置GPG密钥,但执行ssh-add -L获取SSH公钥时,报错:

error fetching identities: communication with agent failed

确认gpg-agent处于运行状态。

排查与解决方法

1. 确保gpg-agent启用SSH支持

编辑~/.gnupg/gpg-agent.conf,添加或确认存在以下行:

enable-ssh-support

保存后重启gpg-agent:

gpg-connect-agent reloadagent /bye

2. 修正SSH_AUTH_SOCK指向

GPG密钥作为SSH密钥使用时,需通过gpg-agent的SSH扩展暴露公钥,因此SSH_AUTH_SOCK应指向gpg-agent的SSH套接字,而非单独的SSH代理套接字。修改.bashrc中的SSH配置部分:

  • 移除原有的SSH_AUTH_SOCK设置,替换为:
export SSH_AUTH_SOCK="$HOME/.gnupg/S.gpg-agent.ssh"
  • 若仍需通过wsl2-ssh-pageant转发Windows端的gpg-agent SSH套接字,需调整socat命令指向Windows端对应套接字,或确保wsl2-ssh-pageant正确转发gpg-agent的SSH通道。

3. 验证套接字通信

执行以下命令检查SSH_AUTH_SOCK是否能正常通信:

echo test | socat - UNIX-CONNECT:$SSH_AUTH_SOCK

若返回SSH_AGENT_FAILURE或无响应,说明套接字连接异常,检查socat进程状态:

ps aux | grep socat

4. 检查文件权限

确保相关目录和文件权限正确:

chmod 700 ~/.gnupg ~/.ssh
chmod +x "$HOME/.ssh/wsl2-ssh-pageant.exe"

5. 重启相关服务

  • 杀掉WSL中运行的socat和gpg-agent进程:
pkill socat gpg-agent
  • 重新加载.bashrc:
source ~/.bashrc
  • 重新插拔YubiKey,确认Windows端gpg-agent.exe进程正常运行(可通过任务管理器查看)。

6. 验证GPG密钥的SSH属性

确认GPG密钥已配置为可用于SSH认证:

gpg --list-secret-keys --with-keygrip

找到对应密钥的keygrip后,尝试直接指定gpg-agent的SSH套接字执行命令:

SSH_AUTH_SOCK="$HOME/.gnupg/S.gpg-agent.ssh" ssh-add -L

内容的提问来源于stack exchange,提问作者Preeti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:34:52