WSL で 1Password SSH Agent を使うときの注意点 (2025/9版)
はじめに
WSL 環境で GitHub に SSH 接続する際、1Password の SSH Agent を使うと便利ですが、設定を誤ると「エージェントが利用されず、直接鍵ファイルの入力を求められる」「Permission denied」などのトラブルになります。ここでは、迷走しがちなポイントと解決方法をまとめます。筆者があまり仕組みを理解せずにカオスな設定をしてしまった後のトラブルシューティングなので、同じ事象になっている人は少ないかもしれません…
検証環境
Windows ホスト:
- Microsoft Windows 11 Home (Build 26100)
- アーキテクチャ: 64 ビット
WSL 環境:
- Ubuntu 22.04.4 LTS (jammy)
- 1Password for Windows (SSH Agent 機能有効)
前提条件とセットアップ手順
この記事の解決策は以下の構成を前提としています:
必要な要素
- Windows 版 1Password: SSH Agent 機能を有効化済み
- WSL2: Ubuntu 22.04 LTS(他のディストリビューションでも基本的に同じ)
-
ブリッジツール:
socatとnpiperelay.exe
セットアップ手順
1. Windows 側の設定
1Password for Windows で Integrate with SSH agent を有効にします。これにより Windows 側で \\.\pipe\openssh-ssh-agent パイプが作成されます。
2. ブリッジツールのインストール
WSL 内で以下を実行してブリッジに必要なツールを準備します:
# socat のインストール
sudo apt update
sudo apt install socat
# npiperelay のダウンロードと配置
wget https://github.com/jstarks/npiperelay/releases/latest/download/npiperelay_windows_amd64.zip
mkdir -p ~/tools/npiperelay ~/bin
unzip npiperelay_windows_amd64.zip -d ~/tools/npiperelay/
ln -s ~/tools/npiperelay/npiperelay.exe ~/bin/npiperelay.exe
rm npiperelay_windows_amd64.zip
3. シェル設定の追加
Fish シェルの場合 (~/.config/fish/config.fish):
筆者はfishユーザーなのでこちらを使用
# SSH Agent の設定
set -gx SSH_AUTH_SOCK $HOME/.ssh/agent.sock
# WSL 起動時に SSH Agent へ自動接続
if not ss -a | grep -q $SSH_AUTH_SOCK
rm -f $SSH_AUTH_SOCK
nohup socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"$HOME/bin/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent" >/dev/null 2>&1 &
end
Bash シェルの場合 (~/.bashrc):
# SSH Agent の設定
export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock
# WSL 起動時に SSH Agent へ自動接続
if ! ss -a | grep -q $SSH_AUTH_SOCK; then
rm -f $SSH_AUTH_SOCK
nohup socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"$HOME/bin/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent" >/dev/null 2>&1 &
fi
4. 設定確認
新しいシェルセッションで以下のコマンドが成功することを確認してください:
# SSH_AUTH_SOCK が正しく設定されているか確認
echo $SSH_AUTH_SOCK
# 出力例: /home/username/.ssh/agent.sock
# 1Password の鍵が認識されているか確認
ssh-add -l
# 1Password に登録した SSH 鍵が表示される
# GitHub への接続テスト
ssh -T git@github.com
# Hi username! You've successfully authenticated...
トラブルの原因
筆者は socat + npiperelay を使っているにもかかわらず Windows SSH を使う設定まで重ねていて詰まっていました。
1. SSH コマンドの混同
原因: alias ssh=ssh.exe や function ssh ssh.exe の設定で Windows の SSH を強制使用しているため、WSL 内の SSH_AUTH_SOCK が無視される。
影響: 1Password エージェントに接続できず、鍵ファイルの直接入力が求められる。
2. Git 設定の問題
原因: git config --global core.sshCommand ssh.exe の設定があるため、Git 操作時に Windows SSH が使われる。
影響: WSL の SSH Agent 経由の認証がバイパスされる。
解決のポイント
1. SSH コマンドを WSL 標準に戻す
# エイリアスや関数の削除
# ~/.bashrc または ~/.config/fish/config.fish から以下を削除
# alias ssh="ssh.exe"
# function ssh ssh.exe
# 正しい SSH コマンドが使われているか確認
which ssh
# 期待値: /usr/bin/ssh
2. Git の SSH 設定を解除
# core.sshCommand の解除
git config --global --unset core.sshCommand
# 設定確認で空になっていればOK
git config --global core.sshCommand
3. SSH Agent ブリッジの確認
# SSH_AUTH_SOCK の確認
echo $SSH_AUTH_SOCK
# 期待値: /home/username/.ssh/agent.sock
# 1Password 鍵の確認
ssh-add -l
# 1Password の鍵が表示されることを確認
# 詳細デバッグ
ssh -vvT git@github.com
# 1Password エージェント経由で認証されることを確認
動作確認
修正後、以下のコマンドで動作確認を行います:
# GitHub SSH 接続テスト
ssh -T git@github.com
# 期待値: Hi <username>! You've successfully authenticated, but GitHub does not provide shell access.
# Git 操作テスト
git fetch
# パスフレーズを聞かれず成功する
接続フロー図(推奨方法)
WSL 側の SSH_AUTH_SOCK から socat → npiperelay.exe を経由して Windows の 1Password SSH Agent に接続しています。
まとめ
WSL で 1Password SSH Agent を使う際のポイントを整理します:
重要なポイント
-
アーキテクチャ:
socat + npiperelay.exeで Windows の 1Password SSH Agent を WSL にブリッジする -
SSH コマンド: WSL 標準の
/usr/bin/sshを使用し、Windows のssh.exeと混同しない -
Git 設定:
core.sshCommandは設定せず、デフォルトの SSH を使用 -
競合回避: Windows 標準の
ssh-agentサービスは無効化
トラブル時のチェック項目
-
which sshで/usr/bin/sshが使われているか確認 -
echo $SSH_AUTH_SOCKでブリッジソケットが設定されているか確認 -
ssh-add -lで 1Password の鍵が認識されているか確認 -
git config --global core.sshCommandで余計な設定がないか確認
この構成で WSL から GitHub への SSH 接続が 1Password 経由でスムーズに行えるようになります。
詳細アーキテクチャ図
1) 推奨構成: WSL ssh + socat/npiperelay
ポイント: WSL の /usr/bin/ssh が SSH_AUTH_SOCK を通じて Windows パイプへ接続し、socat + npiperelay.exe がブリッジ役を担うのが基本構成。
2) 代替: Windows ssh.exe を使う場合の経路と落とし穴
落とし穴:
-
SSH_AUTH_SOCKをWSL側に固定しているとssh.exeは見つけられない。 - Windows 標準
ssh-agentが動いていると、空のエージェントに接続してしまう。 - 鍵ファイル直読みになり、パスフレーズで止まりがち。
3) トラブルシュート フロー
チェック順: 1) どの ssh を使っているか → 2) エージェントの見え方 → 3) 競合の排除(標準 ssh-agent / 直読み)。
Windows 側の経路調査は、あくまで ssh.exe を使いたい場合のチェックリストです。WSL だけで運用している場合は、SSH_AUTH_SOCK とブリッジの確認に集中すれば十分です。
参考情報
公式ドキュメント
- Use the 1Password SSH agent with WSL | 1Password Developer
- 1Password SSH agent | 1Password Developer
- SSH client compatibility | 1Password Developer
- Get started with 1Password for SSH | 1Password Developer
関連記事・解説
- 1Password の ssh-agent 機能を WSL/WSL2 でも利用する(2023/12版) - Qiita
- 1Passwordのssh-agent機能をWSL2でも利用する - Qiita
- Use 1Password SSH Agent in WSL - DEV Community
- 1Password SSH Keys in WSL 2
GitHub 関連情報
Microsoft 公式
最終更新: 2025年9月29日
対象: 1Password v8.10.22+ / Windows 11 / WSL2 (Ubuntu 22.04+)
Discussion
wsl 側の
/usr/bin/sshを使うならこの .ssh/config は参照されないように思うのですが。実際手元でこの設定を試しましたが、 wsl 側は相変わらず接続できず、 win 側の
ssh -T git@github.comは設定を入れる前は正しく動いていたのが設定後は接続できなくなりました。ご指摘いただきありがとうございます。
確かに、wslの
/usr/bin/sshは windows 側の .ssh/config は参照していませんでした。(当然ですが該当の記述を削除しても wsl 側の動作に変化はありませんでした。win側に悪影響しかない記述だったかもしれません)また、記事で「
socatやnpiperelayは不要」などと書いていましたがこれは誤りで、もともと私の環境でsocatやnpiperelayを導入しており、そこに重ねて Windows SSH を入れていたため設定が複雑化していました。私が実際に実行していたコマンドなどの前提条件を追加し、記事を修正いたしました。
この度は誤情報をお伝えしてしまい、大変失礼いたしました。