はじめに
1passwordで登録したSSHキーをWSLで利用する方法を紹介します。
前回はWindowsで利用できるOpenSSHでSSHキーを利用する方法を紹介しました。
-
1passwordでSSHキーを管理する機能がver8.6でサポートしてたので試してみた。 - 技術的な何か。
はじめに 1passwordでSSHキーの管理が利用できるように3月ぐらいからなってたので試してみました。 Windows版はフルサポートになっていますがMac版やLinux版は1password自体
level69.net
普段は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
-
GitHub - jstarks/npiperelay: npiperelay allows you to access Windows named pipes from WSL
npiperelay allows you to access Windows named pipes from WSL - jstarks/npiperelay
github.com
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
参考
-
Forwarding SSH Agent requests from WSL to Windows - stuartleeks.com
Store your SSH keys in Windows and access them from your WSL distros
stuartleeks.com
WSL起動するとソケットが削除されリレーが開始します。
まとめ
WSLで利用する方法を紹介しました。この機能は非常便利です。個人的には1passwordを使い続ける限りはこの機能を利用していくと思います。
それだけの便利な機能だと思います。