目的・ゴール
1Password が SSH キーを管理できる ので、それを WSL 上でも可能にする
今回の対象は GitHub で、通信テストをして成功すれば OK
環境・前提
-
- WSL2 (Ubuntu)
- 1Password (開発者向け設定で「SSH エージェントを使用」を ON)
- go 言語 がインストールしてある
-
- 1Password に管理を任せて、GitHub 上で SSH キーを作成 済み
おおまかな手順
npiperelay.exe のインストール
go install github.com/jstarks/npiperelay@latest
# → C:\Users\__my_user_name__\go\bin\npiperelay.exe
socat のインストール
今度は WSL 上で操作
sudo apt install socat
~/.bashrc の設定記述
引き続き、WSL 上。
NPIPE_RELAY_EXEC_PATH
には、Windows 側でインストールした PATH を、Ubuntu 側から参照できる形の PATH として記述する
# Configure ssh forwarding export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock # need `ps -ww` to get non-truncated command for matching # use square brackets to generate a regex match for the process we want but that doesn't match the grep command running it! NPIPE_RELAY_EXEC_PATH="/mnt/c/Users/__my_user_name__/go/bin/npiperelay.exe" 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:"$NPIPE_RELAY_EXEC_PATH -ei -s //./pipe/openssh-ssh-agent",nofork &) >/dev/null 2>&1 fi
WSL のシャットダウン・再び起動
Windows 上で操作。
設定を終えたら、Windows 側で 一度 WSL をシャットダウンする
wsl --shutdown
もういちど WSL (Ubuntu) を起動してみると、~/.bashrc
に記述したとおり、echo
で文字列が出力されるようになるはず
動作テスト
ssh のテスト接続で、Windows, Ubuntu どちらも 1Password が介入してくるはず
Windows
ssh -T git@github.com
WSL (Ubuntu)
ssh -T git@github.com
Links
- GitHub アカウントへの新しい SSH キーの追加 - GitHub Docs
- WSL のインストール | Microsoft Learn
- 家族や大小のビジネスで使えるパスワードマネージャー | 1Password
- 1Passwordのssh-agent機能をWSL2でも利用する #GitHub - Qiita
- 1passwordで登録したSSHキーをWSLで利用する方法 - 技術的な何か。
- WSL1/WSL2 を再起動する方法 - 備忘録
- The Go Programming Language
- jstarks/npiperelay: npiperelay allows you to access Windows named pipes from WSL - GitHub