WSL2内のUbuntuに外部PCからsshする【1. LAN編】
Windows 11にインストールしたWSL2のUbuntuに、外部PCからsshでアクセスできるようにするための方法をメモ。
今回は自宅のLAN内で接続する方法についてメモ。今後、外からアクセスする方法についてもメモする予定。
環境
$ wslinfo --wsl-version
2.4.11
$ lsb_release -d
No LSB modules are available.
Description: Ubuntu 24.04.2 LTS
手順
どの端末で作業するのかを明確にするため、以下の通り名前をつける。
- 【Ubuntu】: WSL2内のUbuntu(ホスト)
- 【Windows】: WSL2をインストールしているWindows 11
- 【クライアント】: WSL2内のUbuntuに入りたいマシン (当方はOSX)
大まかな手順は以下の通り。
- 【Windows】事前準備
- WSL2のインストール・設定 (ミラーモード にする ← 重要)
- LAN-IP固定
- ポート解放
- 【Ubuntu】sshdサーバーを建てる
- sshライブラリのインストール
- 起動・デーモン化
- 【クライアント】接続
【Windows】事前準備
WSL2のインストール
# コマンドプロンプトで実行する
wsl --install
OSのバージョンなどにこだわりがあれば、公式サイトなどを参考に指定する。
WSL2をミラーモードで起動する
ここがミソ。
~/.wslconfig
に下記を追記して、WSLをミラーモードにする。(ここでの ~
は、Windows Cドライブのホームディレクトリ。)
[wsl2]
networkingMode=mirrored
# 一度wslを落として
wsl --shutdown
# 8秒ほど経過してからもう一度起動する
wsl
LAN-IPの固定
Windows側で設定する方法と、ルーターで設定する方法がある。
私は、ルーターで設定した。
「LAN IPアドレス 固定 方法」などで調べれば、やり方がわかる。
ポート解放
CUI・GUIどちらで設定しても良い。私はGUIで実施した。
このサイトが写真付きでわかりやすかった。
- プロトコル: TCP
- ポート: 22
の送受信をプライベートネットワークで許可する (パブリックネットワークでの解放は危ないので注意)。
【Ubuntu】 sshdサーバーを建てる
sshライブラリのインストール
sshd (sshデーモン) を起動するのに必要なライブラリをインストールする。
sudo apt update # ライブラリを最新に
sudo apt install ssh
起動・デーモン化
sshdの設定
sshのデーモンの設定を更新する。コメントアウトされているところをアンコメントしたり、新たに書き足したりする。
# sshのデーモンを更新
sudo vim /etc/ssh/sshd_config
# --------------------
Port 22
#AddressFamily any
AddressFamily inet # IPv4
#AddressFamily inet6 # IPv6
ListenAddress 0.0.0.0
# ListenAddress ::
# --------------------
上記で、IPv4でのssh接続を受け入れるように設定している。これに関しては、接続できなかったときにいろいろ試行錯誤していた部分なので必ず必要なのか不明。
さらに、この設定ファイルに書くことで、公開鍵認証をできるようにしたり、パスワード認証を無効化したりできる。必要であれば該当部分をアンコメント・追記する。
sshdをデーモンとして登録する
以下のコマンドでデーモンとして登録する。
sudo systemctl enable ssh
# 止まっている状態で有効にしてもサービスは止まったまま
sudo systemctl start ssh
systemdについて詳しくなかったので調べた。
- systemdはLinuxで利用されるデファクトスタンダードな初期化システムで、システムの起動時に各種サービスを立ち上げる役割を担います。
- systemctlは、systemdの制御や管理のためのコマンドラインツールで、サービスの起動・停止・再起動や状態確認など、さまざまな操作ができるものです。
systemctl start
とsystemctl enable
の違いは次の通りです:
systemctl start
: このコマンドは、指定したサービスを直ちに起動します。サービスが現在停止している場合、これにより即座に起動されます。
systemctl enable
: このコマンドは、指定したサービスがシステムの起動時に自動的に起動するように設定します。つまり、システムが再起動された際にもサービスが起動されるようになります。要するに、
start
は手動でサービスを起動するためのコマンドであり、enable
はシステムの起動時に自動的にサービスを起動するように設定するコマンドです。https://openai.com/ja-JP/chatgpt/overview/
【クライアント】接続
接続してみる。
ssh <user-name>@<固定したLAN-IP>
で接続できればOK。
私の場合は追加でセキュリティーを高める設定をした。1. 公開鍵認証の設定 2. パスワード認証をできなくする などした。
注意点
- Windowsがスリープになっているとログインできない
- WSLが起動してないと繋がらない ← 意外と見落としがち
- Windowsにもsshしたい人には向かないかも
コメント
これまでは netsh
を使ってポートフォアワーディングしていたが、wslを立ち上げるたびにipアドレスが変わることが課題であった。今回のようにミラーモードにすることで解決する。
docker周りでのエラーがあったらしいが、現時点で不具合は認識できていない。