始めに結論を。パスワード同様、ssh の秘密鍵も KeePassXC で管理することをお勧めします。(3回目)
以前から ssh の鍵の管理方法について悩んでいましたが、LOLIPOP! のレンタルサーバーを借りたのを機に調べてみた所、パスワードの管理と同様に ssh の秘密鍵の管理も KeePassXC で行った方が便利になる事が分かりました。
3回目となる今回の記事では、KeePassXC から Windows11 の ssh-agent に渡された鍵情報を WSL2 の ssh で参照し、パスフレーズを入力せずに ssh サーバーにログインできるかどうかを、WSL2 編として記載します。今後の予定としては、
- 導入編
- Windows11 編
- WSL2 編 <- 今回の記事
- Pageant 対応ソフトウェア、及び Git for Windows 編
- Linux 編
と進めていく予定です。記事を公開した後には、上記リストをリンクに書き換えます。
- 番外編 WSL2 で wsl2-ssh-agent を試す
- 番外編2 Synology NAS に公開鍵認証で接続する際の注意点
- 番外編3 Windows11 へ github 版の OpenSSH を試す (ssh-agent 不具合対策)
番外編3で、Windows11 へ github 版の OpenSSH を導入した所、ssh-agent.exe の不具合は解消しました。
WSL2 の ssh から Windows11 側の ssh-agent を参照する為の設定
前回の記事で、KeePassXC から Windows11 の ssh-agent への鍵の登録と消去が出来るようになりましたので、今回は Windows11 の ssh-agent の情報を WSL2 の ssh が参照できるように設定します。
これらのページを参考に作業しました。
上のページの元記事 (英語)
旧来からある Windows の ssh クライアントと WSL1 / WSL2 の鍵の管理についてまとめられた良記事です。
Windows の OpenSSH と WSL2 に絞って纏められた記事です。
なお、動作検証は WSL2 の Ubuntu 20.04 で行いました。Ubuntu 22.04 ではない理由は後述します。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.5 LTS
Release: 20.04
Codename: focal
npiperelay.exe, socat のインストール
npiperelay.exe と socat をインストールします。入手、展開方法はリンク先をご覧ください。socat は apt で、npiperelay.exe は WLS2 Ubuntu の $home/npiperelay/npiperelay.exe に置きました。
npiperelay.exe とは
npiperelay is a tool that allows you to access a Windows named pipe in a way that is more compatible with a variety of command-line tools. With it, you can use Windows named pipes from the Windows Subsystem for Linux (WSL).
npiperelay は、さまざまなコマンド ライン ツールとの互換性が高い方法で、Windows の名前付きパイプにアクセスできるようにするツールです。これにより、Windows Subsystem for Linux (WSL) の Windows 名前付きパイプを使用できます。
https://github.com/jstarks/npiperelay
WSL から Windows の名前付きパイプに接続するソフトウェアで、WSL と書いてありますが WSL2 でも使用できます。Windows11 で動作している ssh-agent に接続する為に使用します。
「現在はバイナリは公開していない」と README.md に書かれていますが、以下のリンク先から入手可能です。
Windows 用のソフトウェアですが、WSL2 側のディレクトリに置いていても実行できます。
socat とは
Socat is a command line based utility that establishes two bidirectional byte streams and transfers data between them. Because the streams can be constructed from a large set of different types of data sinks and sources (see address types), and because lots of address options may be applied to the streams, socat can be used for many different purposes.
Socat は、2 つの双方向バイト ストリームを確立し、それらの間でデータを転送するコマンド ラインベースのユーティリティです。ストリームはさまざまなタイプのデータシンクとソースの大規模なセットから構築できるため (アドレス タイプを参照)、多くのアドレス オプションをストリームに適用できるため、socat はさまざまな目的に使用できます。
man socat より
RedHat のページに使用例が記載されていますが、使い方を覚えると色々と出来そうです。(今の私にはちょっと難しい)
WSL2 Ubuntu の ssh から Windows11 の ssh-agent に接続する
Windows11 側の ssh-agent を使用しますので、WSL2 Ubuntu 側では ssh-agent を起動する必要はありません。~/.profile の末尾に以下を追記しました。
# npiperelay & socat により Windows11 側の ssh-agent の情報を ssh で使用する
export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock
ss -a | grep -q $SSH_AUTH_SOCK
if [ $? -ne 0 ]; then
rm -f $SSH_AUTH_SOCK
(setsid socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"$HOME/npiperelay/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent",nofork &) >/dev/null 2>&1
fi
WSL Ubuntu を再起動すれば反映されます。
WSL2 ssh で接続確認
KeePassXC を起動した状態で、WSL2 Ubuntu で確認します。
# Windows11 側の ssh-agent に登録された鍵が表示される
$ ssh-add -l
256 SHA256:XXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYZZZZ hiro20180901 (ED25519)
# パスフレーズを入力しなくてもログイン出来る
$ ssh lolipop
[lolipop-username@server ~]$
# KeePassXC を終了すると鍵は消去される
$ ssh-add -l
The agent has no identities.
WSL2 Ubuntu の ssh で Windows11 側の ssh-agent の鍵を使用できるようになりました。
Ubuntu 22.04 で接続できない問題
最初は Ubuntu 22.04 で試していたのですが、ssh-add -l では登録されている鍵が表示されるのですが、LOLIPOP! レンタルサーバに接続しようとするとパスフレーズを聞かれる状態でした。
どうやら Ubuntu 22.04 の ssh 固有の問題らしいです。Ubuntu 20.04 では問題なく動作しました。
まとめ
KeePassXC を起動した際に ssh の鍵情報が Windows11 の ssh-agent に記録され、Windows11 と WSL2 の両方から参照する事ができるようになりました。
メインで使用するのが Windows11 でパスワードや ssh の秘密鍵を管理させて、必要に応じて WSL2 からパスフレーズなしで他サイトにログインできるのは便利かと思います。ssh の鍵の管理が一元化できるので、新しく鍵ペアを作成した場合にはパスフレーズと共に KeePassXC に保存しておけば、Windows11 でも WSL2 でも、両方からパスフレーズなしで他サイトへログイン可能になります。
次回は Windows11 の ssh-agent の鍵情報を Git for Windows や WinSCP で使用できるように試してみる予定です。PuTTY 由来の Pageant による鍵情報の管理も Windows11 の ssh-agent の情報を参照するようにして、Git for Windows や WinSCP でもパスフレーズなしでログインする方法について記載します。
今回のアイキャッチ画像
Stable Diffusion で作成した雪山と夕暮れです。2月10日には関東でも積雪がありました。午前中に数センチ積もりましたが、午後からの土砂降りで一機に消えてなくなってくれたのは助かりました。北国生まれですが関東の生活が長いので、積雪には弱い生活に変わってしまいました。
コメント