0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[備忘録] WSL初期セットアップ

Last updated at Posted at 2025-12-28

はじめに

利用していたVPSがサービスを終了したため、これまで動かしていたアプリ(Rubyベース)をコンテナ化してSynologyの上へ移行しようと考えた。
移行にあたって手元で気軽に触れるDocker環境を用意したく、WSL上にDocker環境を準備していく。
WSL自体触るのが初めてのため、ここに備忘録を残す。

WSLのインストールから起動まで

WSLインストール

管理者権限でPowerShellを開いて、以下コマンドにてインストール(標準はUbuntu)

> wsl --install

WSL2を指定

明示的にWSL2を指定

> wsl --set-default-version 2

インストールできているか確認

> wsl --list --verbose

出力結果がRunningになっていればOK

  NAME      STATE           VERSION
* Ubuntu    Running         2

WSL起動

以下でPowerShellのターミナルがUbuntuのシェルに遷移。exitするまではUbuntu上の操作となる

> wsl

Ubuntu on WSLの環境構築

SSHの設定

SSHサーバの起動

PowerShellやコマンドプロンプトのインターフェースは見にくいので、好きなターミナルから操作できるようにSSHを有効化する。

以下、SSHサーバのインストール状況を確認。(自分の環境ではopenssh-serverはすでにインストール済みだった。)

$ sudo apt list | grep openssh-server
openssh-server/noble-updates 1:9.6p1-3ubuntu13.13 amd64

もしインストールされていなければ、以下でインストールから。

$ sudo apt install openssh-server

さて、以下のようにSSHサーバのステータスを確認してみると

$ sudo systemctl status sshd
Unit sshd.service could not be found.

なるほど、sshdがサービス登録されていないようで面倒くさい。
素のUbuntuともパス構造が微妙に違うようなので、とりあえずほかのサービスで動いているものを探す。

$ ps -awe
    PID TTY          TIME CMD
      1 ?        00:00:01 systemd
      2 ?        00:00:00 init-systemd(Ub
      7 ?        00:00:00 init
     53 ?        00:00:00 systemd-journal
    112 ?        00:00:00 systemd-udevd
    132 ?        00:00:00 systemd-resolve
    137 ?        00:00:00 systemd-timesyn
    172 ?        00:00:00 cron
    173 ?        00:00:00 dbus-daemon
    180 ?        00:00:00 systemd-logind
    182 ?        00:00:00 wsl-pro-service
    184 hvc0     00:00:00 agetty
    188 ?        00:00:00 rsyslogd
    190 tty1     00:00:00 agetty
    200 ?        00:00:00 unattended-upgr
    518 pts/1    00:00:00 login
    559 ?        00:00:00 systemd
    560 ?        00:00:00 (sd-pam)
    583 pts/1    00:00:00 bash
    687 ?        00:00:00 SessionLeader
    688 ?        00:00:00 Relay(693)
    693 pts/2    00:00:00 bash
    830 ?        00:00:00 polkitd
   1200 pts/2    00:00:00 ps

cronが良さそう。

$ sudo systemctl status cron
● cron.service - Regular background program processing daemon
     Loaded: loaded (/usr/lib/systemd/system/cron.service; enabled; preset: enabled)
     Active: active (running) since Sun 2025-12-28 21:05:24 JST; 1h 13min ago

なるほど。serviceファイルの場所は/usr/lib/systemd/system/ね。

とりあえず、ファイルを作ってステータス確認。リスタートしてみる。

$ sudo touch /usr/lib/systemd/system/sshd.service
$ sudo systemctl status sshd
○ sshd.service
     Loaded: masked (Reason: Unit sshd.service is masked.)
     Active: inactive (dead)
$ sudo systemctl start sshd
Failed to start sshd.service: Unit sshd.service is masked.

ファイル自体は認識するものの、中身がないのでそりゃ動かないよね。
とりあえずsshdだけでも動かせないかな、ということで。

$ sudo /etc/init.d/ssh restart

これは動く。
この状態で、systemctlからステータスを見てみると

$ sudo systemctl status ssh.service
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/usr/lib/systemd/system/ssh.service; disabled; preset: enabled)
     Active: active (running) since Sun 2025-12-28 23:05:14 JST; 1s ago
TriggeredBy: ● ssh.socket

ちゃんと表示される。
systemctlがsshdを認識しているけど、sshd.serviceの中身がないからか、restartすると起動失敗してしまうので、自動起動有効化してみる。

$ sudo systemctl enable ssh.service
Synchronizing state of ssh.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable ssh
Created symlink /etc/systemd/system/sshd.service → /usr/lib/systemd/system/ssh.service.
Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /usr/lib/systemd/system/ssh.service.

行ったっぽい。
sshd.serviceの中身を確認してみると

$ cat /usr/lib/systemd/system/ssh.service
[Unit]
Description=OpenBSD Secure Shell server
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
RuntimeDirectory=sshd
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target
Alias=sshd.service

できてる。
これ、今後は、このファイルコピペで行けるな。

もちろん、ステータスを確認してみるとssh.service; enabledと有効化されている。

$ sudo systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/usr/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: active (running) since Sun 2025-12-28 23:11:35 JST; 9min ago
TriggeredBy: ● ssh.socket

SSHサーバのlisten portの変更

Ubuntu 22.10以降、ssh.socketも変更しなければいけないらしい。
こちらが詳しかったので参照。
https://qiita.com/11ppm/items/a17e585e05cc3903f5c9

HostのWindowsからSSH

WSLのIP Addressを確認

$ ip -4 address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 172.21.189.125/20 brd 172.21.191.255 scope global eth0
       valid_lft forever preferred_lft forever

eth0のインターフェース当てに適当なターミナルからもアクセスを試してみる。
sshdservice.PNG

バッチリ

別の端末からSSH

Host側のWindowsにてポートフォワーディングの設定が必要。
同じく、管理者権限のPowerShellで以下のように設定。

> netsh
netsh> interface portproxy add v4tov4 listenport=20022 listenaddress=0.0.0.0 connectport=20022 connectaddress=172.21.189.125

netsh> interface portproxy show v4tov4

ipv4 をリッスンする:         ipv4 に接続する:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
0.0.0.0         20022       172.21.189.125  20022

通常は動作しているとは思うが、もし停止していたら、IP Helperを起動する。(探した記事の中に明確に起動するように指示しているものがあったので一応補足)

> sc start iphlpsvc

Windowsのファイアウォールに穴を空けるのも忘れずに。

同様にwslをミラーモードで動作させるように指示しているものがあるので、一応補足

$ sudo cat ~/.wslconfig
[wsl2]
networkingMode=mirrored

設定後にwslを再起動

> wsl --shutdown
> wsl

HostのWindowsのIP Addressに対して、20022でSSH接続を試す。

mac2wsl.png

バッチリ

おわりに

WSLをインストールした直後は、最小限のものしか入っていないようなので、aptコマンドで適宜いろいろ入れながら環境を整えていく必要がありそう。
SSHで好きなターミナルからアクセスできるようになったことで、かなり操作性が上がったので、ここからはストレスなく目的の操作をしていけば良い。
この後は、必要なものをコンテナ化して揃えていけば、WSL自体は最低限の環境構築でもよいのかもしれない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?