WSL2上のリモートPodmanにWindowsから接続: ポッドマンが倒せない(2)
お前の公開鍵はもう古い
テレッテレーレー
関連記事:
WSLにDocker代替のPodmanを入れてみる: ポッドマンが倒せない(1)
Distrodを使ってWSLでsystemdを動かす
------------------- ↓ 本題はここから ↓-------------------
前回の記事でWSL上にPodmanをインストールした。
dockerコマンドと互換があるので、
使い勝手に申し分はない。
ただ、Docker Desktopの代替となると、
Windowsや他のWSL上から接続して、
Linux側にログインしなくても使えるようにして置きたい。
Podmanはデーモンレスが売りの一つ。
dockerdやcontainerdのようなサーバーが必要ないということだ。
それからルートレス動作も魅力の一つ。
ルートレスでデーモンレスとなると、
障害に対して強くなる半面、
イメージやコンテナ管理は個人アカウントの管理となるので、
シェアするのは逆に難しくなる。
Linux同士を接続する方法がどうにもなさそうなので、
メインで使ってるOSに追加で載せる方向にする。
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 本題はここから ↓-------------------
Hubサーバーの準備
LinuxOS上にSSHDをインストールして、
SSH経由でコンテナをシェアする。
通常のLinuxであればSSHDを入れるだけでいいのだが、
WSLとなるとsystemdを稼働させる必要がある。
WSLゲストOSにアカウントを用意
Distrodを使ってsystemdを設置しハブ用アカウントを用意。
本稿では新規にOSインストールしているが、
既存のOS利用の場合は以下を参照のこと
distrod_wsl_launcherを使ってゲストOSをインストールする。
Dist名を podman
とすると。
distrod_wsl_launcher -d podman
今回はFedora35を選択。
(Podmanの開発はRedHadだし)
アカウント名を airman
とする。
パッケージを最新版に変更
sudo dnf upgrade -y
systemdを有効にしておく
sudo /opt/distrod/bin/distrod enable
SSHDをインストール
特定アカウントへの接続はSSHとなるので、
SSHDは必要になる。
公開鍵認証が有効かどうかを確認しておく。
sudo dnf install -y openssh-server
echo 'port 2222' | sudo tee -a /etc/ssh/sshd_config.d/port.conf
sudo systemctl enable --now sshd
sudo sshd -T | grep -E "pub|pass|port"
port 2222
pubkeyauthentication yes
passwordauthentication yes
Podmanのインストール
サーバーの用意ができたのでPodmanを入れる
パーミッションも調整が必要なので追加で実行
sudo dnf install -y shadow-utils podman
sudo chmod u+s $(which newuidmap)
sudo chmod u+s $(which newgidmap)
podman info
arch: amd64
buildahVersion: 1.23.1
・・・
podman pull busybox
Podmanをsystemdに登録
sudo loginctl enable-linger $(id -un)
echo 'XDG_RUNTIME_DIR=/run/user/'$(id -u) | tee -a .bashrc
systemctl --user enable --now podman
これでHUBサーバのできあがり
(-。-)y-゜゜゜ 簡単ですね
クライアントのインストール
windows側、他のWSL側から接続するため各環境にPodmanをインストールする。
Linux版はインストール方法は以前の記事と同じなのでそちらを参照。
こちらではWindows用について記述する
アプリインストーラー(winget)を使ってPodmanをインストール
winget install RedHat.Podman
公開鍵を作成
Windows10にいつの間にかopensshがインストールされていた。
C:\Windows\System32\OpenSSH
これがない人は別途インストールが必要かもしれない。
ssh-keygen -t ed25519
podman system connection add podman --identity ~\.ssh\id_ed25519 ssh://airman@localhost:2222/run/user/100
0/podman/podman.sock
podman info
host:
arch: amd64
buildahVersion: 1.23.1
・・・
remoteSocket:
exists: true
path: /run/user/1000/podman/podman.sock
podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/busybox latest beae173ccac6 16 hours ago 1.46 MB
------------------- ↓ 後書きはここから ↓-------------------
途中まではスムーズだったけど、
SSH接続で詰まって、
結局時間を使いまくった。
本当はpodmanのHUBをWindows側に持たせたかったけど、
Windows版のPodmanにはクライアントの機能しかないっぽいので、
今後のバージョンアップに期待・・・Redhatだから無理か。
トラブルシューティング
Windows再起動するとIPが変わってしまう
環境を整備して運用始めようとしたときに、
PCを再起動したら接続ができなくなった。
もちろんip調べて再接続すればいけるんだが。
調べてみるとSSH-Agentを立てて、
WSLとWindowsを橋渡しするツールを仕込む方法があるっぽいが。。。
('Д') メンドクセ
WSL2にはlocalhostでWebにアクセスすることができるようになった。
ならばSSHでもいけるんじゃね?
試してみると
ssh airman@localhost -p 2222
The authenticity of host '[localhost]:2222 ([::1]:2222)' can't be established.
ECDSA key fingerprint is SHA256:X1o3J37OnDe1cKpdVjkf3H/tEVvAwZc8mrlcIi06Vl0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[localhost]:2222' (ECDSA) to the list of known hosts.
Last login: Sat Jan 1 09:05:24 2022 from 172.29.208.1
なんか行けそうだわ。
たぶんポート22とか80とか3桁以内じゃなければ通るんだと思うので、
ポートを2222とか10022とか適当設定すればいい。
ポートを 2222
とすると
echo 'port 2222' | sudo tee -a /etc/ssh/sshd_config.d/port.conf
sudo systemctl restart sshd
sudo systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
・・・・
Jan 01 08:59:25 WARDOG sshd[412]: Server listening on 0.0.0.0 port 2222.
Jan 01 08:59:25 WARDOG sshd[412]: Server listening on :: port 2222.
ポートが2222に変わったのを確認
podman system connection add podman --identity ~\.ssh\id_ed25519 ssh://airman@localhost:2222/run/user/1000/podman/
podman.sock
podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/busybox latest beae173ccac6 29 hours ago 1.46 MB
('ω')ノ通ったよー
認証が通らない
windowsクライアントを設置して、
コネクション設定をして情報を取ろうとすると
以下のようなエラーが発生。
podman.exe system connection add podman --identity ~\.ssh\id_rsa ssh://airman@172.20.243.205/run/user/1000/podman/
podman.sock
podman.exe info
Cannot connect to Podman. Please verify your connection to the Linux system using `podman system connection list`, or try `podman machine init` and `podman machine start` to manage a new Linux VM
Error: unable to connect to Podman. failed to create sshClient: Connection to bastion host (ssh://airman@172.20.243.205:22/run/user/1000/podman/podman.sock) failed.: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
(゜-゜) 接続できてない?
試しに普通にssh接続してみる
ssh.exe airman@172.20.243.205
The authenticity of host '172.20.243.205 (172.20.243.205)' can't be established.
ECDSA key fingerprint is SHA256:X1o3J37OnDe1cKpdVjkf3H/tEVvAwZc8mrlcIi06Vl0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.20.243.205' (ECDSA) to the list of known hosts.
Last login: Fri Dec 31 20:20:16 2021 from 127.0.0.1
(@_@;) 接続できた。。。だと❗❓
普通にsshで接続すると問題なく接続できる。
あーだこーだ調べてみたが、
どうやら公開鍵が古すぎるようだ。
RSA
は非対応になっていて ED25519
などにしておく必要がある。
ssh-keygen -t ed25519
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub
使い方は普通のカギと同じ。
公開鍵をリモート側の ~/.ssh/authorized_keys
に登録する
Discussion