0%

让WSL2使用上Windows中的ssh-agent

目标: 使用pageant作为ssh链接的agent/bridge,做到只需在pageant启动时中输入一次passphrasse,精简WSL2 + Windows中所有ssh相关(ssh、git等)的认证流程。
本文假设ssh key已经正确生成。

需要用到工具

plink.exe :

pageant:

benpye/wsl-ssh-pageant

rupor-github/wsl-ssh-agent

下载解压后完成后建议放置到同一目录下,假设为D:\ssh-bridge
此时目录下应该有

  • wsl-ssh-pageant-amd64-gui.exe
  • npiperelay.exe
  • pageant.exe
  • plink.exe

配置

Windows部分的设置

  1. 新增环境变量: GIT_SSH 指向D:\ssh-bridge\plink.exe
  2. 使用 wsl-ssh-pageant:D:\ssh-bridge\wsl-ssh-pageant-amd64-gui.exe -systray --winssh ssh-pageant
  3. 新增环境变量:SSH_AUTH_SOCK=\\.\pipe\ssh-pageant,其中的ssh-pageant 需要和2 步骤中的 --winssh参数对应
  4. 通过pageant.exe启动并加载私钥: D:\ssh-bridge\pageant.exe ".../common.ppk

WSL2中的配置

以Ubuntu为例:

  1. 安装socat: sudo apt install socat

  2. ~/.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参数对应

  3. 重新source ~/.bashrc