前提条件
- ESXi上に構築した Windows 10 Pro 21H1
準備
WSL2はHyperVに依存するため、WindowsをESXiで動かす場合は 「この仮想マシンでハイパーバイザーアプリケーションを有効にする」 にしておく必要がある。
WSL2の設定とUbuntu 20.04のインストール
PowerShell管理者モード
PS> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
PS> Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
再起動を行う。
コマンドプロンプト
> wsl --set-default-version 2
> winget install Canonical.Ubuntu.2004
> powershell Invoke-WebRequest -Uri https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi -OutFile ~/Desktop/wsl_update_x64.msi
> %USERPROFILE%/Desktop/wsl_update_x64.msi
「スタート」から「Ubunutu 20.04 LTS」を起動し、UNIXユーザとパスワードを作成・設定し、exitで終了する。
規定のサブシステムを確認する。
コマンドプロンプト
> wsl -l
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu-20.04 (既定)
Ubunutuにログイン
コマンドプロンプト
> wsl
$ uname
Linux DESKTOP-XXXXXX 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
$ exit
OpenSSHのセットアップ
OpenSSHのインストール
PowerShell 管理者モード
PS> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
PS> Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
PS> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
PS> Start-Service sshd
PS> Set-Service -Name sshd -StartupType 'Automatic'
PS> if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}
別マシンから ssh ユーザ名@ホスト名 でログインできるか確認する。
公開鍵認証を有効にする
リモートマシン(macOS/bash,zsh)で作業
Windowsマシンのユーザとホスト(IPアドレス)を設定
リモートマシンのbash
$ export TARGET_SSH_USER_HOST="Windowsユーザ@Windowsホスト"
$ ssh $TARGET_SSH_USER_HOST mkdir 'C:/ProgramData/ssh/'
$ scp ~/.ssh/id_ed25519.pub $TARGET_SSH_USER_HOST:'C:\ProgramData\ssh\administrators_authorized_keys'
$ ssh $TARGET_SSH_USER_HOST icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
次のコマンドで公開鍵でログインできればOK
リモートマシンのbash
$ ssh $TARGET_SSH_USER_HOST
> exit
$ unset TARGET_SSH_USER_HOST
Docker Desktop for Windowsのインストール
コマンドプロンプト
> winget install Docker.DockerDesktop
再起動する。「I accept the terms」し、Docker Enginenの起動を待つ。コマンドプトンプトを開く。
> docker run -d -p 80:80 docker/getting-started
http://localhost/ で Getting Started がでてくればOK
Windows Terminal, Visual Studio Codeのインストール
コマンドプロンプト
> start winget install Microsoft.WindowsTerminal
> start winget install Microsoft.VisualStudioCode
macOSからWindowsにSSHし、WSL2のUbuntuからDocker DesktopでDebianを起動する
リモートマシンのbash
$ ssh Windowsユーザ@Windowsホスト
> Microsoft Windows [Version 10.0.19043.1348]
(c) Microsoft Corporation. All rights reserved.
Windowsユーザ@DESKTOP-AAAAAA C:\Users\Windowsユーザ> wsl
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
UNIXユーザ@DESKTOP-AAAAAA :/mnt/c/Users/Windowsユーザ$ docker run --rm -it debian bash
root@6534eb344f96:/# uname -a
Linux 6534eb344f96 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 GNU/Linux
root@6534eb344f96:/# cat /etc/debian_version
11.1
WSL2とDocker Desktopの接続について
Docker DesktopのあとにWSL2とLinuxを入れた場合
Docker Desktopの Settings → Resources → WSL INTEGRATION で導入できる
WSL2からDockerの接続が切れた場合
- wsl --shutdown でWSL2を再起動
- タスクトレイの🐋を右クリックでDocker Desktopを再起動する
- wsl で Ubuntuにログイン
で復旧する
ssh-agentの利用方法
キーを作成する
コマンドプロンプト
> ssh-keygen -t ed25519
キーは %USERPROFILE%/.ssh に作成される
ssh-agentの起動
PowerShell管理者モード
PS> Get-Service ssh-agent | Set-Service -StartupType Automatic
PS> Start-Service ssh-agent
これでssh-agentが自動起動となる
ssh-agent-wslの導入
WSL2からssh-agentを利用する場合にはこのツールが必要となる。
コマンドプロンプト
> winget install 7zip.7zip
> powershell Invoke-WebRequest -Uri https://github.com/rupor-github/ssh-agent-wsl/releases/download/v2.5/ssh-agent-wsl.7z -OutFile ~/Desktop/ssh-agent-wsl.7z
> mkdir "%USERPROFILE%/apps/ssh-agent-wsl"
> "C:\Program Files\7-Zip\7z.exe" x -o"%USERPROFILE%/apps/ssh-agent-wsl" "%USERPROFILE%/Desktop/ssh-agent-wsl.7z"
WSL2上のUbuntu Bash
$ eval $(/mnt/c/Users/Windowsユーザ/apps/ssh-agent-wsl/ssh-agent-wsl -r)
~/.bashrcに追記しておくとログインのたびに実行される
$ echo 'eval $(/mnt/c/Users/Windowsユーザ/apps/ssh-agent-wsl/ssh-agent-wsl -r)' >> ~/.bashrc
ssh-add をするときは、WSL2に入る前に行う必要がある。