目标: 使用pageant作为ssh链接的agent/bridge,做到只需在pageant启动时中输入一次passphrasse,精简WSL2 + Windows中所有ssh相关(ssh、git等)的认证流程。
本文假设ssh key已经正确生成。
需要用到工具
plink.exe :
pageant:
- https://the.earth.li/~sgtatham/putty/latest/w64/pageant.exe
- an SSH authentication agent for PuTTY, PSCP, PSFTP, and Plink
benpye/wsl-ssh-pageant
rupor-github/wsl-ssh-agent
- https://github.com/rupor-github/wsl-ssh-agent
- 我们只需要对应release下的
npiperelay.exe
下载解压后完成后建议放置到同一目录下,假设为D:\ssh-bridge
此时目录下应该有
- wsl-ssh-pageant-amd64-gui.exe
- npiperelay.exe
- pageant.exe
- plink.exe
配置
Windows部分的设置
- 新增环境变量:
GIT_SSH
指向D:\ssh-bridge\plink.exe
- 使用
wsl-ssh-pageant
:D:\ssh-bridge\wsl-ssh-pageant-amd64-gui.exe -systray --winssh ssh-pageant
- 新增环境变量:
SSH_AUTH_SOCK=\\.\pipe\ssh-pageant
,其中的ssh-pageant
需要和2 步骤中的--winssh
参数对应 - 通过
pageant.exe
启动并加载私钥:D:\ssh-bridge\pageant.exe ".../common.ppk
WSL2中的配置
以Ubuntu为例:
安装
socat
:sudo apt install socat
在
~/.bashrc
中追加以下内容,当登录后即启动socat转发1
2
3
4
5
6
7# export SSH_AUTH_SOCK
export SSH_AUTH_SOCK=/tmp/wsl-ssh-pageant.socket
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/d/ssh-bridge/npiperelay.exe -ei -s //./pipe/ssh-pageant",nofork & ) >/dev/null 2>&1
fi注意其中的
-s //./pipe/ssh-pageant
也要和Windows配置中2部分的--winssh
参数对应重新
source ~/.bashrc