WSL2 + DockerからWindowsのOpenSSH Authentication Agentに接続する

過去、WindowsとWSL2でOpenSSH Authentication Agentを使用する方法を書きました。

最後に、WSL2 + DodkerのコンテナからWindows(ホスト)のOpenSSH Authentication Agentへ接続できるようにします。

環境
Windows
10 home (20H2)
WSL
2
Ubuntu
20.04 LTS
Docker Desktop for Windows
3.5.2 (66501)

Windowsの設定

OpenSSH Authentication Agent 有効化

以前と同じですので省略します。

秘密鍵の登録

以前と同じですので省略します。

WSL2の設定

ディストリビューションにはUbuntuを使用しています。コンテナ作成にはVSCodeとRemote Developmentを使用します。

ビルドコンテキスト

/home/name/project_dir/
`-- .devcontainer/
    |-- devcontainer.json
    `-- Dockerfile
devcontainer.json
{
    "name": "SSH",
    "dockerFile": "./Dockerfile",
    "remoteUser": "dev"
}
Dockerfile
FROM ubuntu:latest

ARG UID=1000
ARG GID=1000
ARG UNAME=dev

RUN apt-get update \
    && apt-get install -y --no-install-recommends openssh-client

RUN groupadd -g $GID $UNAME && \
    useradd -u $UID -g $GID -o -s /bin/bash -m $UNAME
USER $UID

コンテナの作成と起動

準備ができたので、Remote Developmentでコンテナを作成します。起動後、ターミナルでssh-agentに登録された鍵リストを確認してみます。

$ ssh-add -l

256 SHA256:XXXXXXXXXXX.... id_ed25519_server (ED25519)

接続の確認ができました。

エラーが出る場合

稀に以下のエラーが発生することがありますが、Windowsの再起動で解消しました。

error fetching identities: communication with agent failed

後記

過去の二回の記事は、WSL2 + DockerコンテナからGithubに接続するための下準備として書きました。

事前のリサーチでは、コンテナからWin(ホスト)側への接続は複雑そうに思えたのですが、コンテナにopenssh-clientをインストールするだけで、あっさり接続できてしまいました。

ただ、前回のWSL2(Ubuntu)の設定が影響した可能性もあるので、Ubuntuopenssh-clientsocatをアンインストールし、~/.bashrcも元に戻し、再度コンテナを立ち上げてみたところ、これまた問題なくWin(ホスト)側のssh-agentに接続できました。

現在、VSCode + Remote Developmentでコンテナ作成をすれば、この辺りをうまく処理してくれているのかもしれません。
(ターミナルでコマンド入力によるコンテナ作成や、Ubuntu以外のOSは試していません。)

詳細までは調べていないので分かりませんが、目的は達成できたので終わりとします。