我的 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
- 运行并重新启动我的 shell
exec 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'