hello,idea

読了時間: 5 min read

1Password SSH Agent連携で快適なDev Container生活

これまでWindows標準のOpenSSH Authentication Agentを使っていたのですが、1Passwordでの一元管理に魅力を感じて移行を決意しました。

思ったより設定が複雑で苦戦しましたが、なんとか動くようになったので、その手順をまとめておきます。

Windows側の1Passwordで管理しているSSH鍵を、WSL2およびVS CodeのDev Container内で安全に利用できる環境を構築していきます


Step 1: Windows側の準備

まずはWindows側の1Passwordを設定し、SSH Agentを有効化します。

1Password の設定

  1. 1Passwordアプリを開き、設定 > 開発者 を開く
  2. SSHエージェントを使用する」にチェックを入れる

これで1Passwordが持っているSSH鍵をエージェント経由で使えるようになります!

Windows標準SSH Agentの無効化

競合を防ぐため、Windows標準のSSH Agentを止めます。

  1. 「サービス」アプリで OpenSSH Authentication Agent を検索
  2. サービスを停止
  3. スタートアップの種類を「無効」に変更

注意: 競合防止のため必須

この手順をスキップすると、1PasswordのSSH Agentと競合してうまく動作しません。必ず無効化してください!


Step 2: WSL2側のブリッジ設定

次に、WSL2からWindows側の1Password SSH Agentに接続できるようにします。

~/.bashrc への追記

以下のコードを ~/.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>&1
fi

<USERNAME> の部分はご自身のWindowsユーザー名に置き換えてください!

設定を反映:

Bash
source ~/.bashrc

~/.ssh/config の作成

SSH設定ファイルを作成して、エージェントのパスを指定します:

Bash
mkdir -p ~/.ssh
cat > ~/.ssh/config << 'EOF'
Host *
IdentityAgent ~/.ssh/agent.sock
ForwardAgent yes
EOF

これで、すべてのSSH接続で1Password経由の鍵が使われるようになります


Step 3: Dev Container (VS Code) の設定

最後に、Dev Containerからもエージェントが使えるようにします。

devcontainer.json の修正

.devcontainer/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 の修正

環境変数を設定します:

docker-compose.yaml
services:
app:
environment:
CHOKIDAR_USEPOLLING: "1"
HOST: 0.0.0.0

Step 4: 動作確認

設定が完了したら、動作確認をしましょう!

WSL2 で確認

WSL2 (Bash)
ssh-add -l

1Passwordに登録されているSSH鍵の一覧が表示されればOKです

Dev Container 内で確認

VS CodeでDev Containerを開いて、ターミナルで以下を実行:

Dev Container (Bash)
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

  1. npiperelay: https://github.com/jstarks/npiperelay