🤖

WSL2のUbuntuでkeychain経由でssh-agentを使う

2021/10/02に公開

TL;DR

WSL2のUbuntuでssh-agentを使うには、keychainを使って、.zshrc

/usr/bin/keychain -q --nogui $HOME/.ssh/id_rsa
source $HOME/.keychain/$HOST-sh

と書けば良い。cshやfishは、$HOST-sh-sh-csh-fishにする。

はじめに

WSL2のUbuntuでssh-agentを使うためにevalしてる人、いると思います。

eval `ssh-agent`

このあとssh-addするとパスフレーズが記憶されます。しかし、一度ターミナルを抜けてもう一度開くと、ssh-agentプロセスは生きているのに、ssh-addができません。

$ pidof ssh-agent
95
$ ssh-add
Could not open a connection to your authentication agent.

だもんで面倒だから.zshrc

eval `ssh-agent`

って書いてて、毎回ssh-agentを起動してたんだけど、そうすると

  • 毎回ssh-agentが起動する
  • ターミナルを開くたびにssh-addする必要がある

という問題が生じます。とりあえず、手元のターミナルではこんなことになりました。

$ pidof ssh-agent                                                                                                   
32173 31548 31344 31137 29020 28832 27947 27740 27248 27156 22731 22181 21753 21580 20882 19950 19721 18981 18612 18466 17212 16870 16678 16613 16482 15297 14260 13290 12988 12923 12591 12089 12084 11110 10915 10581 10386 10155 10036 9839 9505 9131 8890 7440 6796 6345 5675 5404 5147 4812 4709 3981 3679 3416 3378 3200 2907 2455 2065 1870 1433 952 279 95

これはさすがにひどいのでなんとかしましょう、という話です。

keychainの導入

上記は、keychainを導入することで解決できます。まずは不要なプロセスを全部殺しておきます。PowerShellから以下を実行すると楽です。

wsl --shutdown

次にWSL2のUbuntuで、keychainを入れます。

sudo apt-get install keychain

keychainを起動します。

/usr/bin/keychain -q --nogui $HOME/.ssh/id_rsa

初回起動時はパスフレーズを聞かれるので入力します。すると、$HOME/.keychainにいくつかシェルスクリプトが出来るので、それを実行します。

source $HOME/.keychain/$HOST-sh

これにより、keychainssh-agentを探し、もし無ければ起動してくれ、既存のssh-agentプロセスがあれば接続してくれるようになります。一度パスフレーズを入力したら、WSLをシャットダウンしない限りパスフレーズを覚えておいてくれます。これでパスフレーズを何度も入力したり、ssh-agentが複数起動することもなくなりました。めでたしめでたし。

参考文献

以下の記事を参考にしました

GitHubで編集を提案

Discussion