Windows
ssh-agent
Windows10
WindowsSubsystemForLinux
WSL

Windows Subsystem for Linux で ssh-agent を使う


前回のおさらい

https://qiita.com/wing-tail/items/22f2c74b4cfdde05bc2b

WSL + hyper でゴキゲンな Linux 開発環境を手に入れた!


概要

Windows 10 Spring Creators Update (1803) でデフォルト導入されるようになった OpenSSH クライアントは、WSL からだとバグで動かなかった。

しかし、Windows 10 October 2018 Update (1809) にて直ったので、自動起動設定をしておくと作業が捗る。


前提

スタート → 設定 → システム → バージョン情報から「Windows の仕様」を確認。

バージョンが1809ならOK.

違っていたら、スタート → 設定 → 更新とセキュリティ → Windows Updateから「更新プログラムのチェック」で更新する。


方針

.bashrc に ssh-agent と ssh-add の実行を記載する。

ただし、ssh-agent による PID 等の設定をファイルに出力してやって固定化する。

これによってクライアントでシェルを複数起動した場合でも1つの ssh-agent を共有できる。

つまり、screen などを利用した際に ssh-agent が乱立することはなくなる。


設定内容

SSH_AGENT_FILE="$HOME/.ssh/ssh_agent"

# 固定化された ssh-agent 設定が存在すれば、それを読み込んで
# 既に起動している ssh-agent プロセスを再利用
[ -f $SSH_AGENT_FILE ] && source $SSH_AGENT_FILE >& /dev/null

# ssh-add がエラーを返すなら、ssh-agent プロセスが存在しないものとして
# これを起動しつつ、設定をファイルに出力
if ! ssh-add -l >& /dev/null ; then
ssh-agent > $SSH_AGENT_FILE
# ssh-agent の設定内容を標準出力してほしいなら、/dev/null へ投げなくても良い
source $SSH_AGENT_FILE >& /dev/null
# $HOME/.ssh 配下にある id_rsa という名前のファイルを ssh-add
find $HOME/.ssh -name id_rsa | xargs ssh-add
fi

注意点としては、screen の自動起動なども設定していた場合に、それより前に ssh-agent の設定を記載すること。

まあ、プロセス進行を考えれば当たり前の話だけど。

あと、秘密鍵の命名規則によって、ssh-add している箇所の記述は微調整が必要になる。

$HOME/.ssh/hogehoge/id_rsa に統一して、hogehoge の部分を適宜変更するフォルダ単位の管理が、個人的にはベストだと思ってる。


結果

WSL(hyper)起動時に秘密鍵のパス入力したら、Windows をシャットダウンするまで、パス入力しないで秘密鍵を使えるようになった!