2
1

More than 1 year has passed since last update.

macOSからWindowsにSSHし、WSL2のUbuntuからDocker DesktopでDebianを起動する

Last updated at Posted at 2021-12-10

前提条件

  • 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 ユーザ名@ホスト名 でログインできるか確認する。

公開鍵認証を有効にする

OpenSSH キーの管理

リモートマシン(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の接続が切れた場合

  1. wsl --shutdown でWSL2を再起動
  2. タスクトレイの🐋を右クリックでDocker Desktopを再起動する
  3. 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に入る前に行う必要がある。

参考URL

2
1
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
2
1