8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【WSL2】WSL2のUbuntuでsshdの自動起動を有効にする【Ubuntu】

Last updated at Posted at 2023-04-23

はじめに

WSL2(Windows Subsystem for Linux 2)でUbuntuなどのLinuxディストリビューションを利用する場合、常にSSH経由でログインしたいといったケースがあります。
ググってみると、古い時代/新しい情報が錯綜しており、また全体的に混沌としていたので、対応方法を整理しました。

Windowsホスト側でバッチファイルを用意し、スタートアッププログラムとして実行させるといったような対応が見つかりますが、今はもう不要です。

TL;DR

セットアップ作業として、WSL2(Ubuntu)内で以下を実施するだけで、WSL2(Ubuntu)起動時にsshdが自動で起動されるようになります。

  • aptでsshパッケージをインストールする
  • sshd用設定ファイルを準備する
  • /etc/wsl.conf ファイルでsystemdが有効になっていることを確認する

本稿では、sshdは以下のように設定します。

  • /etc/ssh/sshd_config
    • Port 10022
    • PasswordAuthentication yes

動機(WSL2(Ubuntu)に常にSSH接続したい理由)

WSLはコマンドプロンプトやPowerShell、Windows Termina経由で利用できますが、それらのツールはログを自動的に取得開始するといった機能がありません。

Tera TermやPuTTYなどのSSHクライアントは、ホストへの接続時に自動的にターミナルログを取得出来る機能があり、これを利用したいのが目的です。

実現の仕組み

以下の2つの要素を組み合わせて実現しています。

  • WSL2側の設定として、稼働するLinuxインスタンス内でのsystemdをサポートするよう設定する。
  • Ubuntu内でsystemdを利用し、sshdを自動起動させる。

前者の仕組みについては、以下公式ドキュメントに記載があります。
以前はデフォルトで有効化されていなかったようなのですが、本稿の検証で試行した際にはデフォルトで有効化されていました。

Advanced settings configuration in WSL > systemd support

Many Linux distributions run "systemd" by default (including Ubuntu) and WSL has recently added support for this system/service manager so that WSL is even more similar to using your favorite Linux distributions on a bare metal machine. You will need version 0.67.6+ of WSL to enable systemd. 

なお、WSL2の起動・実行に関する設定は、WSL2全体の設定を指定するものである .wslconfig と、 各Linuxインスタンス内でのふるまいを設定する wsl.conf の2種類があります。
今回は wsl.conf のみを利用します。またUbuntu内のファイルパスは /etc/wsl.conf となることに注意してください。

Advanced settings configuration in WSL > What is the difference between wsl.conf and .wslconfig?

You can configure the settings for your installed Linux distributions that will automatically be applied every time you launch WSL in two ways, by using:

  • .wslconfig to configure settings globally across all installed distributions running on WSL 2.
  • wsl.conf to configure settings per-distribution for Linux distros running on WSL 1 or WSL 2.

Both file types are used for configuring WSL settings, but the location where the file is stored, the scope of the configuration, and the version of WSL running your distribution all impact which file type to choose.

環境

  • Windowsホスト:
    • OS Version: Microsoft Windows 10 Pro 10.0.19045 Build 19045
  • WLS2ゲスト
    • Ubuntu 22.04.2 LTS

作業手順

セットアップ作業

WSL2自体のインストール、およびUbuntuディストリビューションのインストールは完了しているものとします。

Ubuntuへのログイン

コマンドプロンプトやWindows Terminalなどから、Ubuntuインスタンスに接続します。

まず、Ubuntuディストリビューションがインストール済みであることを確認します。

WSL上のディストリビューションの確認
C:\>wsl --list
Windows Subsystem for Linux Distributions:
Ubuntu (Default)

WSL2のデフォルトのディストリビューションがUbuntuとなっていることを確認したのち、下記コマンドを実行してUbuntuインスタンスへログインします。
なお、以降はWSL2(Ubuntu)上でのプロンプトは、 $ のみの表記とします。

Ubuntuへのログイン
C:\>wsl
Ubuntへログインできたことの確認
yourname@YOURHOST:/mnt/c/Users/yourname$
yourname@YOURHOST:/mnt/c/Users/yourname$ uname -a
Linux LAB10 5.15.90.1-microsoft-standard-WSL2 #1 SMP Fri Jan 27 02:56:13 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

aptでsshパッケージをインストールする

通常のUbuntuと同様、sshパッケージをインストールします。

sshdのインストール
$ sudo apt install ssh -y
# ※出力省略

sshd用設定ファイルを準備する

鍵ペアではなくユーザ名・パスワードでログインできるように、またSSH用のポートを任意のものに設定します。

  • Port 10022
  • PasswordAuthentication yes

sshdの設定ファイルを変更する必要がありますが、オリジナルの設定ファイルである /etc/ssh/sshd_config には手を加えず、/etc/ssh/sshd_config.d/sshd_ubuntu.conf というファイルを作成し、必要な設定を加えていきます。

sshd設定ファイルの変更
$ sudo vi /etc/ssh/sshd_config.d/sshd_ubuntu.conf
# 以下の2行を追加
Port 10022
PasswordAuthentication yes

上記ファイル作成完了後、sshdを再起動させます。

sshd再起動
$ sudo systemctl restart ssh

sshdのステータス等を確認します。

sshdステータス確認
$ systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2023-04-23 11:58:01 JST; 4s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 1429 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 1430 (sshd)
      Tasks: 1 (limit: 19182)
     Memory: 1.7M
        CPU: 10ms
     CGroup: /system.slice/ssh.service
             └─1430 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Apr 23 11:58:01 YOURHOST systemd[1]: Starting OpenBSD Secure Shell server...
Apr 23 11:58:01 YOURHOST sshd[1430]: Server listening on 0.0.0.0 port 10022.
Apr 23 11:58:01 YOURHOST sshd[1430]: Server listening on :: port 10022.
Apr 23 11:58:01 YOURHOST systemd[1]: Started OpenBSD Secure Shell server.

/etc/wsl.conf ファイルを確認

次に /etc/wsl.conf を確認し、 [boot] セクションに systemd=true という指定があることを確認します。

/etc/wsl.confの確認
$ cat /etc/wsl.conf
# 以下2行が存在することを確認する。
[boot]
systemd=true

動作確認

Ubuntuインスタンスを再起動させ、sshdが自動起動しているか確認する

Ubuntuインスタンスを一旦停止させ、起動後にsshdも自動起動するか確認します。

まず管理者権限でコマンドプロンプトかPowerShellを起動して以下のように実行し、WSL2上で稼働しているインスタンスを停止させます。
(なおこの操作は、すべてのインスタンスが対象になります。特定のインスタンスのみを指定することはできないようです。)

WSL2の稼働中インスタンスの停止
C:\>wsl --shutdown

改めてWSL2(Ubuntu)にログインします。
(このタイミングでUbuntuインスタンスが起動されますので、数秒待たされます。)

Ubuntuにログイン
C:\>wsl

uptimeコマンドを実行し、再起動した直後であることを確認します。

再起動されたことの確認
yourname@YOURHOST:/mnt/c/Users/yourname$
yourname@YOURHOST:/mnt/c/Users/yourname$ uptime
 13:51:31 up 0 min,  1 user,  load average: 0.27, 0.06, 0.02

Windowsホスト側からWSL2(Ubuntu)にSSH接続できることを確認します。
localhost:10022 に対して、自身のユーザ名・パスワードで接続できるようになっているはずです。

参考:昔の対応

以前は、本稿で実現した仕組みが存在しない時代があり、みないろいろ工夫してsshdの自動起動を実現していました。
具体的には以下のような対応になります。

  • Windowsホスト側で、WSLのインスタンス内で service ssh start コマンドを実行させるバッチファイルを作成する
  • 当該バッチファイルを、スタートアッププログラムとして登録する/Task Schedulerで定期的に実行する

現在でも以下のような情報が見つかりますが、このような面倒な対応はもう不要です。

Is there an easy way to have WSL Ubuntu services start automatically on Windows startup? - Ask Ubuntu
A step by step tutorial on how to automatically start ssh server on boot on the Windows Subsystem for Linux · GitHub

8
8
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
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?