😊

SSHだけのコンテナ

に公開

はじめに

windows11 pro, sshd, docker desktop, wsl, ubuntu が入っています。
もう一台の windows11 home から SSH でコンテナに接続してみる。

コンテナ作成

dockerfile

最低限動く状態でです。最近の ubuntu は、標準で ubuntu というユーザが存在しているようなので、それを使います。

dockerfile
FROM ubuntu:24.04

RUN apt-get update && \
    apt-get install -y openssh-server

RUN mkdir -p /run/sshd && \
    mkdir -p /home/ubuntu/.ssh
 
RUN cat <<'END' > /home/ubuntu/.ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJdCWD/hDPXXAZXJ6v1/lv/47dHauxdoXUgHQYocA6tB yukip@i5-10400
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM6uTTorSMRo4pxaFZLjXkjdJvSwc94oeW4pjdzkoe4O yukip@i5-14400
END

#RUN echo "PubkeyAuthentication yes" > /etc/ssh/sshd_config.d/99-custom.conf

#RUN chmod 700 /home/ubuntu/.ssh && \
#    chmod 600 /home/ubuntu/.ssh/authorized_keys && \
#    chown -R ubuntu:ubuntu /home/ubuntu/.ssh

RUN chown -R ubuntu:ubuntu /home/ubuntu/.ssh

# SSHのホストキーをイメージに焼き付ける
#RUN ssh-keygen -A

EXPOSE 22

CMD ["/usr/sbin/sshd", "-D"]

build

docker build -t ssh:3 .

run

docker run -d -p 2224:22 --name s3 -h hname ssh:3


dockerdesktop の ポート番号が表示されてないけど、同じ PC からとりあえず接続してみたら、一応動きました。

sshd_config のデフォルト設定が意外とゆるいみたいで、パーミッションとか変更しなくても一応うごいています。最終的には sshd_config を書き換えて厳しめにしないとなと思います。

別 PC から接続

windows のポートを開いておく(管理者権限)

New-NetFirewallRule -DisplayName "ContainerSSH(2220-2229)" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 2220-2229

windows defender ファイアウォールにも登録されたみたい

接続


つながりました。
wsl からも powershell7 からも接続OKでした。

この設定してたの忘れてた

WSL 同士で SSH できないかなと思って、WSL のネットワークの設定を変更していました。
これのおかげてうまくつながっているような気がします。

wsl2 の ip アドレスの設定方法

Mirrored ネットワークモードを利用するといいみたい。
ただし、Windows 11 22H2以降が必要。

.wslconfig ファイルの編集

2台のPCそれぞれで、%UserProfile% フォルダ(C:\Users\YourUsername)にある .wslconfig ファイルに以下の設定を追加する。

[wsl2]
networkingMode=mirrored

WSLの再起動

PowerShellで wsl --shutdown を実行し、再度Ubuntuを起動します。
windows11 と同じIPアドレスで wsl につながる。でも、別のIPアドレスが割り振られるわけではないようです。

Discussion