これまでWindows標準のOpenSSH Authentication Agentを使っていたのですが、1Passwordでの一元管理に魅力を感じて移行を決意しました。
思ったより設定が複雑で苦戦しましたが、なんとか動くようになったので、その手順をまとめておきます。
Windows側の1Passwordで管理しているSSH鍵を、WSL2およびVS CodeのDev Container内で安全に利用できる環境を構築していきます
Step 1: Windows側の準備
まずはWindows側の1Passwordを設定し、SSH Agentを有効化します。
1Password の設定
- 1Passwordアプリを開き、設定 > 開発者 を開く
- 「SSHエージェントを使用する」にチェックを入れる
これで1Passwordが持っているSSH鍵をエージェント経由で使えるようになります!
Windows標準SSH Agentの無効化
競合を防ぐため、Windows標準のSSH Agentを止めます。
- 「サービス」アプリで
OpenSSH Authentication Agentを検索 - サービスを停止
- スタートアップの種類を「無効」に変更
注意: 競合防止のため必須
この手順をスキップすると、1PasswordのSSH Agentと競合してうまく動作しません。必ず無効化してください!
Step 2: WSL2側のブリッジ設定
次に、WSL2からWindows側の1Password SSH Agentに接続できるようにします。
~/.bashrc への追記
以下のコードを ~/.bashrc の末尾に追加します:
# --- 1Password SSH Agent Bridge ---export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock
if [ ! -S $SSH_AUTH_SOCK ]; then mkdir -p $(dirname $SSH_AUTH_SOCK) rm -f $SSH_AUTH_SOCK (setsid socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"/mnt/c/Users/<USERNAME>/bin/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent",nofork &) >/dev/null 2>&1fi<USERNAME> の部分はご自身のWindowsユーザー名に置き換えてください!
設定を反映:
source ~/.bashrc~/.ssh/config の作成
SSH設定ファイルを作成して、エージェントのパスを指定します:
mkdir -p ~/.sshcat > ~/.ssh/config << 'EOF'Host * IdentityAgent ~/.ssh/agent.sock ForwardAgent yesEOFこれで、すべてのSSH接続で1Password経由の鍵が使われるようになります
Step 3: Dev Container (VS Code) の設定
最後に、Dev Containerからもエージェントが使えるようにします。
devcontainer.json の修正
.devcontainer/devcontainer.json に以下の設定を追加:
{ "containerEnv": { "FORCE_COLOR": "1" }, "mounts": [ "source=${localWorkspaceFolder}/.config/gh,target=/home/node/.config/gh,type=bind" ], "postStartCommand": "ssh-add -l || true"}docker-compose.yaml の修正
環境変数を設定します:
services: app: environment: CHOKIDAR_USEPOLLING: "1" HOST: 0.0.0.0Step 4: 動作確認
設定が完了したら、動作確認をしましょう!
WSL2 で確認
ssh-add -l1Passwordに登録されているSSH鍵の一覧が表示されればOKです
Dev Container 内で確認
VS CodeでDev Containerを開いて、ターミナルで以下を実行:
ssh-add -l同じように鍵が表示されれば、完璧です!
トラブルシューティング
うまく動かない場合は、以下を確認してください。
よくある問題と解決策
1. ssh-add -l で “Could not open a connection” エラー
- 1Passwordがアンロックされているか確認
- Windows標準SSH Agentが本当に無効化されているか確認
- WSL2で
SSH_AUTH_SOCKが正しく設定されているか確認(echo $SSH_AUTH_SOCK)
2. Dev Container内で鍵が見えない
devcontainer.jsonの設定が正しいか確認- コンテナを完全に再ビルド(
Dev Containers: Rebuild Container) - ホスト側(WSL2)で鍵が見えるか先に確認
3. npiperelay が見つからない
- npiperelay.exe を事前にインストール1
- パスが正しいか確認(
/mnt/c/Users/<USERNAME>/bin/npiperelay.exe)
それでもダメなら…
1Passwordアプリを一度再起動してみてください。SSH Agent機能がリセットされて、うまくいくことがあります。
まとめ
この設定により、SSH鍵の管理が劇的に楽になります:
- ✅ 鍵を1Passwordで一元管理
- ✅ WSL2とDev Containerでシームレスに利用
- ✅ セキュリティを保ちながら便利に使える
一度設定してしまえば、あとは快適なDev Container生活が待っています
Footnotes
-
npiperelay: https://github.com/jstarks/npiperelay ↩