适用于 Linux 的 Windows 子系统:获取身份时出错:使用 KeepassXC 的密钥与代理通信失败

适用于 Linux 的 Windows 子系统:获取身份时出错:使用 KeepassXC 的密钥与代理通信失败

我的 ssh 密钥存储在 KeepassXC(版本 2.7.1)中。我已在 KeepassXC 中启用 SSH 代理集成并让其使用 OpenSSH。我尝试使用 Pageant 并“使用两个代理”,但它不起作用,因为它无法连接到 ssh 代理。KeepassXC 安装在我的 Windows 10 上。

ssh-add -l我已经运行、启动并自动启用了 OpenSSH 身份验证代理。完成所有这些设置后,我可以在 powershell 中看到密钥已加载。

按照此 repo 中的 README 指南进行操作https://github.com/rupor-github/wsl-ssh-agent, 我有:

  • 安装socat在 WSL2 中
  • wsl-ssh-agent.exe在 Windows 10 中安装并运行。
  • 存储npiperelay.exe在 Windows 10 分区中(当前位于 Documents 文件夹中)。
  • 并添加到我的文件底部.zshrc
export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock

ss -a | grep -q $SSH_AUTH_SOCK
if [ $? -ne 0 ]; then
        rm -f $SSH_AUTH_SOCK
        (setsid socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"/mnt/c/Users/myusername/Documents/wsl-ssh-agent/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent",nofork &) >/dev/null 2>&1
fi
  • 运行并重新启动我的 shellexec zsh或关闭并重新打开我的终端并进行测试,ssh-add -l但我收到此错误消息:

error fetching identities: communication with agent failed

我也尝试过重启 KeepassXC 和 OpenSSH 代理服务,同样的错误。但我可以确认密钥仍然通过 powershell 加载ssh-add -l

我究竟做错了什么?

更新:我的 WSL2 是 Debian。

> cat /etc/debian_version
11.3
> ssh -V
OpenSSH_8.4p1 Debian-5, OpenSSL 1.1.1n  15 Mar 2022

我的 Windows 10

PS C:\WINDOWS\system32> ssh -V
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2

会不会是因为OpenSSH版本差异导致的问题?

更新2:

得益于此处单独问题的回答,我能够将 Windows 10 中的 OpenSSH 更新到最新版本:https://superuser.com/a/1609071/830668

PS C:\WINDOWS\system32> ssh -V
OpenSSH_for_Windows_8.9p1, LibreSSL 3.0.2

重启测试,错误依旧。

答案1

如果您在 WSL 中启用了 systemd 支持,这可能是 WSL2 互操作性的问题。

检查章节中是否/etc/wsl.conf指定。systemd=true[boot]

如果启用了 systemd,你可以参考Microsoft/WSL - 问题 8843建议采取缓解措施来恢复互操作性:

sudo sh -c 'echo :WSLInterop:M::MZ::/init:PF > /usr/lib/binfmt.d/WSLInterop.conf'

相关内容