Windows 10のssh-agentをWSL2から使う
概要
VSCodeでWSLにリモートで繋いで作業するときにGitコマンドがパスレーズの入力で止まるのが面倒なので設定してみた。
OpenSSHクライアントはWindows 10標準のものを使っている。
WSL側でもssh-agentを使うのもな,ということで共通化したかった。
Windows側の設定
OpenSSHクライアントのインストール
コントロールパネルの「アプリと機能」から「オプション機能の管理」→「機能の追加」で「OpenSSHクライアント」をインストールする
ssh-agentを有効にする
コマンドプロンプトを「管理者として実行」で起動する
OpenSSH Authentication Agentを自動起動に設定し,サービスを開始する
code:console
sc config ssh-agent start=auto
sc start ssh-agent
c:\home\saito\binにwsl-ssh-agent-gui.exeとnpiperelay.exeを置く
スタートアップにwsl-ssh-agent.exeのショートカットを置く
リンク先をC:\home\saito\bin\wsl-ssh-agent-gui.exe -setenv -envname=WSL_AUTH_SOCKにする
これでログイン時に自動起動する
Git BashでWindowsのOpensshを使うように設定
環境変数GIT_SSHにOpenSSHクライアントのEXEファイルを指定する
code:console
setx GIT_SSH C:\Windows\system32\OpenSSH\ssh.exe
秘密鍵の登録
code:console
ssh-add .ssh/id_rsa
Enter passphrase for .ssh/id_rsa:
Identity added: .ssh/id_rsa (.ssh/id_rsa)
ssh-add -l
2048 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .ssh/id_rsa (RSA)
レジストリに記録される
セキュリティが気になる人はログインでssh-add,ログアウトするときにssh-add -Dするようにした方がいいかも。
WSL側の設定
Windows10 バージョン2004(OSビルド 19587.1000)でもWSL2だと動かない(2020年3月22日現在)
通常は~/.bashrcに以下を追加する
code:~/.bashrc
socatをインストールする
code:console
$ sudo apt install socat
~/.bashrcに以下を追加
code:~/.bashrc
export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock
ss -a | grep -q $SSH_AUTH_SOCK
rm -f $SSH_AUTH_SOCK
( setsid socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"/mnt/c/home/saito/bin/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent",nofork & ) >/dev/null 2>&1
fi