wsl-ssh-agentでWindows Subsystem for LinuxからWindowsのssh-agentを使う設定手順
はじめに
Windows 10 に OpenSSH クライアントをインストール · hnakamur’s blog で Windows の ssh-agent を使いだしてから Windows Subsystem for Linux (以下WSLと略)からも使いたいと思うようになりました。
調べてみると wsl-ssh-agent で出来るそうなので設定手順をメモ。
設定手順
wsl-ssh-agent のダウンロードと解凍
Releases · rupor-github/wsl-ssh-agent から最新版の wsl-ssh-agent.7z をダウンロードします。
解凍するには ダウンロード | 7-Zip から 7-Zip をダウンロードするか、あるいは WSL で p7zip パッケージを入れて 7zr コマンドを使います。
解凍すると wsl-ssh-agent-gui.exe
と changelog.txt
というファイルが作られますので、 wsl-ssh-agent-gui.exe
をお好みの場所に配置します。
私は C:\wsl-ssh-agent
というフォルダーを作って C:\wsl-ssh-agent\wsl-ssh-agent-gui.exe
に置きました。
ショートカットを作成してスタートアップに配置
以下のようにリンク先を指定してショートカットを作成します。
-socket
オプションに指定したパスにソケットファイルが作られます。パスは適宜変更してください。
C:\wsl-ssh-agent\wsl-ssh-agent-gui.exe -socket C:\Users\hnakamur\.ssh\ssh-agent.sock
Windows キー + R で 「ファイル名を指定して実行」ダイアログを開き shell:startup
と入力してスタートアップのフォルダーを開き、上記で作成したショートカットをそこに移動します。
WSL の Ubuntu で SSH_AUTH_SOCK
環境変数を設定
次は WSL の Ubuntu の設定です。
~/.profile
で以下のように SSH_AUTH_SOCK
環境変数を設定します。
上記で wsl-ssh-agent-gui.exe
の -socket
に指定したパスを WSL からアクセスできるよう /mnt/c/...
の形式で指定します。
SSH_AUTH_SOCK=/mnt/c/Users/hnakamur/.ssh/ssh-agent.sock
export SSH_AUTH_SOCK
WSL で元々使っていた ssh-agent 用の設定を削除
私の場合は Windows 10のWindows Subsystem for Linux(WSL)を日常的に活用する - ククログ(2017-11-08) で紹介されていた weasel-pageant と WSL の Ubuntu の keychain パッケージを使っていました。
~/.bashrc
に以下のような設定を書いていたのでこれを消します。
eval $(/mnt/c/Program\ Files\ \(x86\)/weasel-pageant/weasel-pageant -r -a "/tmp/.weasel-pageant-$USER")
eval $(keychain --eval $HOME/.ssh/id_ed25519)
WSL の端末を再起動して動作確認
私は Windows Terminal を使ってるので、これのウィンドウを一旦閉じて終了し、再度実行します。
ssh-add -l
を実行して登録済みの鍵一覧を確認し、未登録なら ssh-add 鍵ファイル名
で追加します。
手順は以上です。
脱線: wsl-ssh-agent の実装についてのメモ
wsl-ssh-agent は Go で書かれているので一部をちょっとだけ見てみました。
まず README を見ると wsl-ssh-agent-gui.exe は Go 1.12 から使えるようになった AF_UNIX ソケットを使っているそうです。
あと systray サブパッケージの README を見ると github.com/getlantern/systray をフォーク、改変しているそうです。
変更内容が気になったので Diff from github.com/getlantern/systray@6f0e5a3 to github.com/rupor-github/wsl-ssh-agent@a305054 に貼っておきました。
ロガーを Go 標準の log パッケージに変更しているのと、 WM_WTSSESSION_CHANGE
という Windows のメッセージに対応して処理を行うようになっていました。
WM_WTSSESSION_CHANGE
を初めて知ったので参考情報を貼っておきます。