はじめに
1passwordで登録したSSHキーをWSLで利用する方法を紹介します。
前回はWindowsで利用できるOpenSSHでSSHキーを利用する方法を紹介しました。
普段はWSLで作業を行っているので1passwordを利用する方法を紹介します。というか結論としては便利すぎ。
WSLからパイプする
WSLから1passwordで登録したSSHキーを利用する仕組みは以下です。

ここで必要となるソフトウェアが2つあります。
Windows側
- npiperelay
WSL側
- socat
WSL側sshはsocatからnpiperelay、ssh-agentにパイプされSSHキーを参照することができます。
構成はシンプルです。
Windows側の設定
npiperelayを下記からダウンロードします。適当な場所に解凍しましょう。保存場所はWSLから参照できる場所です。今回は c:\npiperelay に配置しています。
https://github.com/jstarks/npiperelay/releases/download/v0.1.0/npiperelay_windows_amd64.zip
Windows側はこれで完了です。
WSL側の設定
socatをインストールします。
sudo apt install socat
インストールはこれで完了です。
次に、以下のように設定します。npiperelay.exe の保存場所に読みかえてください。
export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"/mnt/c/npiperelay/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent",nofork &
オプション
WSL起動時に上記の設定を入力するのは面倒なので .bashrcなどに書き込みます
export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock
ALREADY_RUNNING=$(ps -auxww | grep -q "[n]piperelay.exe -ei -s //./pipe/openssh-ssh-agent"; echo $?)
if [[ $ALREADY_RUNNING != "0" ]]; then
if [[ -S $SSH_AUTH_SOCK ]]; then
echo "removing previous socket..."
rm $SSH_AUTH_SOCK
fi
echo "Starting SSH-Agent relay..."
(setsid socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"/mnt/c/npiperelay/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent",nofork &) >/dev/null 2>&1
fi
参考
WSL起動するとソケットが削除されリレーが開始します。

まとめ
WSLで利用する方法を紹介しました。この機能は非常便利です。個人的には1passwordを使い続ける限りはこの機能を利用していくと思います。
それだけの便利な機能だと思います。


