前回は、Windows Subsystem for Linux(WSL)の次世代バージョン「WSL 2」によって、Windows 10 HomeでDocker Desktopが利用できるようになったことをお伝えしました。今回もWSLが関係してくる話です。それはまるで「Linuxのように見えるWindowsのリモート接続環境」が作れるという話です。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
現在の「Windows 10」と「Windows Server」には、幾つかの有名なオープンソースソフトウェア(OSS)のコンポーネントが含まれています。Windows 10 バージョン1803/Windows Server, version 1803からは、「tar」「curl」「ssh」「sftp」「scp」が標準で組み込まれています。
「OpenSSHクライアント」はWindows 10 バージョン1803と半期チャネル(SAC)のWindows Server, version 1803から標準搭載され、「OpenSSHサーバー」はWindows 10 バージョン1803と長期サービスチャネル(LTSC)の「Windows Server 2019」、SACのWindows Server, version 1809からオンデマンド機能としてオプションで利用可能になりました。
Linuxバイナリ実行のためのLinuxシェル環境を提供する「Windows Subsystem for Linux(WSL)」は、Windows 10 バージョン1607(Homeエディションを除く)でβ版として搭載され、Windows 10 バージョン1709とSACのWindows Server, version 1709で正式版となりました。
「WSL 1」とも呼ばれる初代バージョンは、LinuxバイナリからのシステムコールをWindowsカーネルがLinuxカーネルをエミュレーションして処理することで、Linuxバイナリに変更を加えることなく、Windows上で実行できるようにします。ただし、WSL 1はLinuxカーネルのシステムコールの全てに完全対応していないことが課題でした。
最新のWindows 10 バージョン2004とWindows Server, version 2004では、エミュレーションベースの従来のWSL 1に加えて、Linuxカーネルそのものを仮想化技術を用いて実行するWSL 2が正式に利用可能になりました(画面1)。
画面1の環境は、Windows Server, version 2004の標準機能だけで実現したものです。具体的には、OpenSSHサーバーと「WSL 2」を利用しています。同様の環境は、Homeエディションを含むWindows 10 バージョン2004でも構築できます。
WSL 2は本物のLinuxカーネルであるため、システムコールの課題は解消され、パフォーマンスも向上しています。カスタマイズすれば、LinuxのGUIデスクトップを表示させることも可能になるようです。今でもWindows側に「X Server」を入れ、WSL 2のLinuxの「X Client」に接続することで可能ですが、Linux GUIアプリのサポートは、WSLの今後のロードマップに含まれています。
WSL 2を実現するために、WindowsにはLinuxカーネルが組み込まれて提供されます(将来的にはLinuxカーネルの更新がWindows Updateを通じて提供される予定です)。また、Windows 10 バージョン2004からはHomeエディションでもWSL 1とWSL 2が利用可能になりました。Hyper-Vに対応していないWindows 10 HomeエディションでもWSL 2を利用可能にするため、仮想化技術として「Hyper-V」の代わりに、「仮想マシンプラットフォーム」というHyper-Vのサブセット機能が提供されます。つまり、前出の画面1の環境は、Windows 10 バージョン2004のPC向けの全てのエディションで実現できます。
画面1の環境が特に何かに役立つというわけではありませんが(リモートデスクトップ接続異常時の帯域外管理接続に使えるかもしれませんし、Homeエディションへのリモート接続に使えるかもしれません)、今回はWindows Server, version 2004をベースに画面1にあるOpenSSHサーバーおよびWSL 2の環境の作り方を紹介します。
材料は以下の通りです。2つ目の要件はWSL 2のために必要です。今回は説明しませんが、「入れ子構造の仮想化」(Nested Virtualization)が有効なHyper-V仮想マシンやAzure仮想マシンの中に構築することも可能です(本稿ではHyper-V仮想マシンで作業しています)。
画面1のsshクライアントから接続している環境を構築するには、次の手順で操作します。Windows Server, version 2004で説明しますが、機能の有効化については、Windows 10 バージョン2004の場合はコントロールパネルの「Windowsの機能の有効化または無効化」と「設定」アプリの「アプリと機能」にある「オプション機能」から追加できます。
Windows PowerShell(管理者)を開き、次のコマンドラインを実行して「OpenSSHサーバー」の機能を有効化し、「sshd」サービスを開始して、ローカルのsshクライアントから接続できることを確認します(画面2)。Windows 10の場合は、「設定」アプリの「アプリと機能」にある「オプション機能」から「OpenSSHサーバー」を追加してください。
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 Start-Service sshd ssh ユーザー名@コンピュータ名(またはIPアドレスまたはlocalhost)
ローカル接続できることを確認したら、「C:\ProgramData\ssh\sshd_config」を編集して、ネットワーク接続のための構成を行ってから「sshd」サービスを再起動します。また、「sshd」サービスのスタートアップの種類を「自動」に変更し、「Windowsファイアウォール」にTCPポート「22」の受信許可規則を作成します。例えば、Windows Serverに「Administrator」がパスワード認証でリモート接続することを許可するには、「PermitRootLogin prohibit-password」のコメントを外します。
notepad C:\ProgramData\ssh\sshd_config Restart-Service sshd Set-Service -Name sshd -StartupType Auto New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName "sshd"
リモートのWindowsやLinuxのsshクライアントからこのサーバに接続して、コマンドプロンプトにリモート接続できることを確認してください(画面3)。
Windows PowerShell(管理者)を開き、以下のコマンドラインを実行して、「WSL」(この時点では「WSL 1」です)と「仮想マシンプラットフォーム」の機能を有効化し、コンピュータを再起動します。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform Restart-Computer -Force
Windows 10 バージョン2004の場合は、コントロールパネルの「Windowsの機能の有効化と無効化」を開き、「Linux用Windowsサブシステム」と「仮想マシンプラットフォーム」を有効化します。Windows 10 Homeエディション以外の場合は、「仮想マシンプラットフォーム」の代わりに「Hyper-V」を有効化しても構いません。Hyper-Vの利用予定がある場合は、「Hyper-V」の方を有効化すればよいでしょう。なお、Windows Server, version 2004の場合、Hyper-VではWSL 2は動作しないようです。
コンピュータの再起動が完了したら、Windows PowerShell(管理者)を再び開き、以下のコマンドラインを順番に実行して、「Windows Subsystem for Linux Update Setup」を使用してWindows Server, version 2004またはWindows 10 バージョン2004に含まれるLinuxカーネルをWSL 2正式版に対応したものに更新します。標準で組み込まれているものは、WSL 2の開発中のバージョンに対応したもので、正式版には対応していません。将来的には、Windows Updateを通じてLinuxカーネルの更新が提供される予定です。
Invoke-WebRequest -uri https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi -outfile .\wsl_update_x64.msi .\wsl_update_x64.msi Remove-Item -Path .\wsl_update_x64.msi
Linuxカーネルを更新したら、コマンドプロンプトまたはPowerShellを管理者として開いて次のコマンドラインを実行し、WSLの既定のバージョンを「WSL 1」から「WSL 2」に変更します。
wsl --set-default-version 2
Windows Server, version 2004の場合は、以下のドキュメントにある利用可能なLinuxディストリビューションをダウンロードしてインストールします。Windows 10 バージョン2004の場合は、「Microsoft Store」からお好みのLinuxディストリビューションを入手してインストールしてください。
以下のコマンドラインは、Windows Server, version 2004に「Ubuntu 18.04」をインストールする場合の例です。最後の「ubuntu1804.exe」は、初回実行時にUbuntu 18.04のセットアップを行います。このとき、任意のユーザー名とパスワードを指定してください。セットアップが完了すると、WSL 2版のLinuxシェル環境に入ります(画面4)。
invoke-webrequest -uri https://aka.ms/wsl-ubuntu-1804 -outfile ubuntu.zip -UseBasicParsing Expand-Archive .\ubuntu.zip .\ubuntu Remove-Item -Path .\ubuntu.zip .\ubuntu\ubuntu1804.exe 「仮想マシンプラットフォーム(VirtualMachinePlatform)」または「Hyper-V(Microsoft-Hyper-V)」
後でLinuxシェル環境を起動するには、「bash.exe」か「wsl.exe」(既定のLinuxディストリビューションを起動します)か「.\ubuntu\ubuntu1804.exe」と入力します。
Windowsに標準搭載されているOpenSSHサーバーの既定のシェルは、「コマンドプロンプト」(cmd.exe)です。この既定のシェルは、以下のドキュメントで説明されているように、Windows PowerShellやPowerShell Core、WSL(WSL 1またはWSL 2)のLinuxシェルに変更することが可能です。
具体的には、レジストリキー「HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH」に文字列型の値「DefaulShell」を作成し、値のデータに既定のシェルのパスを指定します。
例えば、「DefaultShell」の値を「"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"」にすると、Windows PowerShellを既定のシェルに変更できます。また、「"C:\Program Files\PowerShell\7\pwsh.exe"」にすると、「PowerShell Core 7」に変更できます(PowerShell Core 7がインストールされている場合)。
値のデータを「"C:\Windows\System32\wsl.exe"」または「"C:\Windows\System32\bash.exe"」にすると、WSL(WSL 1またはWSL 2)のLinuxシェルの現在の既定(1つの場合はインストール済みのもの)に変更できます。「C:\Users\Administrator\ubuntu\ubuntu1804.exe」のように特定のLinuxディストリビューションを直接指定することも可能です。
Windows PowerShell(管理者)でOpenSSHサーバーの既定のシェルを変更するには、次のようなコマンドラインを実行します。
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\wsl.exe" -PropertyType String -Force
以上の手順で画面1の環境、つまりsshクライアントから接続すると、WSL 2のLinuxシェル環境に直接入ることができるようになります。なお、接続時にはLinuxディストリビューションをインストールした際のユーザー名とパスワードの資格情報ではなく、Windowsのユーザー名とパスワードの資格情報(リモートデスクトップ接続と同じもの)を入力する必要があることに注意してください。
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(2020-2021)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.