スポンサーリンク

KeePassXC で ssh 秘密鍵も管理して ssh-agent と連携する ~ WSL2 編 ~

雪山と夕暮れ
記事内に広告が含まれています。

始めに結論を。パスワード同様、ssh の秘密鍵も KeePassXC で管理することをお勧めします。(3回目)

以前から ssh の鍵の管理方法について悩んでいましたが、LOLIPOP! のレンタルサーバーを借りたのを機に調べてみた所、パスワードの管理と同様に ssh の秘密鍵の管理も KeePassXC で行った方が便利になる事が分かりました。

3回目となる今回の記事では、KeePassXC から Windows11 の ssh-agent に渡された鍵情報を WSL2 の ssh で参照し、パスフレーズを入力せずに ssh サーバーにログインできるかどうかを、WSL2 編として記載します。今後の予定としては、

と進めていく予定です。記事を公開した後には、上記リストをリンクに書き換えます。

番外編3で、Windows11 へ github 版の OpenSSH を導入した所、ssh-agent.exe の不具合は解消しました。

スポンサーリンク

WSL2 の ssh から Windows11 側の ssh-agent を参照する為の設定

前回の記事で、KeePassXC から Windows11 の ssh-agent への鍵の登録と消去が出来るようになりましたので、今回は Windows11 の ssh-agent の情報を WSL2 の ssh が参照できるように設定します。

これらのページを参考に作業しました。

WSL2でKeepassXCのSSH key-agentを利用する - Qiita
前置きみなさん!WSL2でssh-agentはお使いでしょうか?久しぶりにWindowsを使い始めたところでハマったのがssh-agentどうするんだ?問題でした。MacOSの場合はkeepa…

上のページの元記事 (英語)

How to use KeepassXC to serve SSH keys to WSL2 and Ubuntu
Using KeepassXC SSH, on Windows 10, to serve SSH keys to WSL 2 running Ubuntu

旧来からある Windows の ssh クライアントと WSL1 / WSL2 の鍵の管理についてまとめられた良記事です。

混沌を極めるWindowsのssh-agent事情 - Qiita
どうしてこうなった。何の話?WindowsでのSSH-AGENTとSSHの話です。この記事での用語: SSHとssh, SSH-AGENTとssh-agentこの記事では、SSH-AGENT…

Windows の OpenSSH と WSL2 に絞って纏められた記事です。

Windows と WSL2 で同じ SSH key を使用する方法 | 株式会社こまり
皆様どうも、こんにちは! こまりの情報処理技術者、桑木です。 WSL2はただ単にWindowsから使えるLinux環境と言うだけでなく、とてもシームレスにコマンド実行やファイルの参照ができるので、WindowsにLinuxが融合したかのよう...

なお、動作検証は 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 とは

GitHub - jstarks/npiperelay: npiperelay allows you to access Windows named pipes from WSL
npiperelay allows you to access Windows named pipes from WSL - jstarks/npiperelay

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 に書かれていますが、以下のリンク先から入手可能です。

Releases · jstarks/npiperelay
npiperelay allows you to access Windows named pipes from WSL - jstarks/npiperelay

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 より
Getting started with socat, a multipurpose relay tool for Linux
If you need an advanced sysadmin tool for your toolbox, this is the one. Socat allows for bidirectional data transfers f...

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! レンタルサーバに接続しようとするとパスフレーズを聞かれる状態でした。

WSL2のOpenSSH Agent Relayが動かなくなったので調査した

どうやら 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日には関東でも積雪がありました。午前中に数センチ積もりましたが、午後からの土砂降りで一機に消えてなくなってくれたのは助かりました。北国生まれですが関東の生活が長いので、積雪には弱い生活に変わってしまいました。

コメント

タイトルとURLをコピーしました