本記事の対象読者
- 『最短突破 LinuC レベル 1 バージョン 10.0 合格教本[101 試験, 102 試験対応] 改訂新版』の「学習用仮想環境のセットアップ」章の手順に従い環境構築を完了させた方
-
VBoxManage.exeの存在する場所がC:\Program Files\Oracle\VirtualBoxの方
(別の場所の場合は適宜読み替えて下さい) - Windows ターミナル(Windows Terminal)をインストール済みの方
完成後イメージ
- Windows ターミナルのドロップダウンメニューに「Alma Linux1」と「Debian」の 2 つの項目を追加
(※アイコン部は本記事の対象外)
動作確認済バージョン
| バージョン | |
|---|---|
| ホスト OS | Windows10 22H2 |
| Oracle VM VirtualBox | 7.2.4 |
| Windows Terminal | 1.23.12811.0 |
| OpenSSH | 9.5 |
| LibreSSL | 3.8.2 |
構築
バッチファイルの配置
@echo off
set EXITCODE=%ERRORLEVEL%
if "%~1"=="/?" goto :usage
set ARGC=0
for %%a in ( %* ) do set /a ARGC+=1
if %ARGC% equ 0 (
goto :usage
)
set "VBOX_DIR="
for /f "tokens=2,*" %%A in ('
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox" /v InstallDir 2^>nul ^| find "InstallDir"
') do set "VBOX_DIR=%%B"
if "%VBOX_DIR%"=="" (
for /f "tokens=2,*" %%A in ('
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Oracle\VirtualBox" /v InstallDir 2^>nul ^| find "InstallDir"
') do set "VBOX_DIR=%%B"
)
if "%VBOX_DIR%"=="" (
echo Oracle VirtualBox が検出されませんでした。>&2
echo %CMDCMDLINE% | findstr /I " /c " >nul && echo. && pause
exit /b 1
) else set PATH=%VBOX_DIR%;%PATH%
set INTERVAL_SECONDS=1
set TIMEOUT_ERRORLEVEL=255
set VM_NAME=%~1
chcp 65001 > nul
VBoxManage showvminfo "%VM_NAME%" --machinereadable | findstr /i "VMState=" | findstr /i "running" > nul
if %ERRORLEVEL% neq 0 (
VBoxManage startvm "%VM_NAME%" --type headless
)
if %ARGC% equ 2 (
set SSH_ARGS="%~2"
goto :connection
)
set VM_USER=%~2
set VM_HOST=%~3
set W="%VM_HOST:0=%"
set W="%W:1=%"
set W="%W:2=%"
set W="%W:3=%"
set W="%W:4=%"
set W="%W:5=%"
set W="%W:6=%"
set W="%W:7=%"
set W="%W:8=%"
set W="%W:9=%"
set W=%W:"=%
:userspecified
if "%VM_USER%"=="" (
set /p VM_USER=login:
goto :userspecified
)
if "%W%"=="" (
set SSH_ARGS="%VM_USER%@localhost" -p "%VM_HOST%"
) else (
set SSH_ARGS="%VM_USER%@%VM_HOST%"
)
goto :connection
:polling
VBoxManage showvminfo "%VM_NAME%" --machinereadable | findstr /i "VMState=" | findstr /i "running" > nul
if %ERRORLEVEL% neq 0 (
goto :termination
)
:connection
ssh -t %SSH_ARGS% 2> nul
if %ERRORLEVEL% neq %TIMEOUT_ERRORLEVEL% (
set EXITCODE=%ERRORLEVEL%
echo.
echo.
)
timeout /t %INTERVAL_SECONDS% > nul
goto :polling
:usage
echo Oracle VirtualBox の仮想マシン (VM) のゲストOSを起動し、
echo これをホストOS側のターミナルで遠隔操作を行います。
echo.
echo 使用方法:
echo %~nx0 VM名 パターン
echo %~nx0 VM名 ユーザー名 接続先
echo.
echo 引数:
echo VM名 ゲストOSとなるVM名を指定します。
echo パターン SSH構成ファイル ( %%USERPROFILE%%\.ssh\config )
echo に登録された Host パターンを指定します。
echo ユーザー名 ゲストOSのログインユーザー名を指定します。
echo "" (空名) を指定すると、標準入力から
echo ログインユーザー名を指定できます。
echo 接続先 ゲストOSの接続先となるホスト名、IPアドレス、
echo 又はポート番号を指定します。
echo NATポートフォワーディングを利用する場合は、
echo ポート番号を指定します。
echo %CMDCMDLINE% | findstr /I " /c " >nul && echo. && pause
:termination
exit %EXITCODE%
上記の内容のバッチファイル2をremote-console.batのファイル名で、エクスプローラーのアドレスバーに%USERPROFILE%と入力して Enter キーを押すと開く場所に保存して下さい。
VirtualBox 登録済の「Alma Linux」「Debian」の追加設定
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyvm "Alma Linux" --defaultfrontend headless --natpf2 "SSH,tcp,,2222,,22"
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyvm "Debian" --defaultfrontend headless --natpf2 "SSH,tcp,,22222,,22"
VirtualBox 登録済の「Alma Linux」「Debian」について、デフォルトの起動方法をヘッドレス起動とし、新たなポートフォワーディングルールを追加します。
Windows ターミナルにてプロファイル追加
- Windows ターミナル起動
- 「設定」タブ表示(
Ctrl+,) - 左ペインの「新しいプロファイルを追加します」をクリック
- 右ペインの「新しい空のプロファイル」をクリック
-
名前を
Alma Linuxに設定 -
コマンド ラインを
"%USERPROFILE%\remote-console.bat" "Alma Linux" "testuser" "2222"に設定3 - 下ペインの「保存」をクリック
- 左ペインの「新しいプロファイルを追加します」をクリック
- 右ペインの「新しい空のプロファイル」をクリック
-
名前を
Debianに設定 -
コマンド ラインを
"%USERPROFILE%\remote-console.bat" "Debian" "testuser" "22222"に設定 - 下ペインの「保存」をクリック
- ドロップダウンメニューに「Alma Linux」「Debian」が追加されていることを確認
SSH 接続の確立
Windows ターミナルのドロップダウンメニューから「Alma Linux」をクリックすると新たなタブが追加され、下記の様な入力待ち状態になります。(******の部分は公開鍵のハッシュ値)
Waiting for VM "Alma Linux" to power on...
VM "Alma Linux" has been successfully started.
The authenticity of host '[localhost]:2222 ([127.0.0.1]:2222)' can't be established.
ECDSA key fingerprint is SHA256: ******
Are you sure you want to continue connecting (yes/no/[fingerprint])?
yesと入力し、Enter キー押して下さい。自動的に"%USERPROFILE%\.ssh\known_hosts"ファイルに公開鍵が登録され、下記の様に表示されます。
Waiting for VM "Alma Linux" to power on...
VM "Alma Linux" has been successfully started.
The authenticity of host '[localhost]:2222 ([127.0.0.1]:2222)' can't be established.
ECDSA key fingerprint is SHA256: ******
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
yesと入力し、Enter キー押して下さい。
下記の様なパスワード入力待ち状態になった際は、パスワードを入力してログインし、root ユーザーに権限昇格した上でshutdown -h nowコマンドでゲスト OS をシャットダウンして下さい。
testuser@localhost's password:
ゲスト OS のシャットダウン処理後、下記の表示になったらCtrl+Dで閉じて下さい。(Enter キーを押すとゲスト OS が再起動します)
[プロセスはコード 4294967295 (0xffffffff) で終了しました]
このターミナルを Ctrl+D で閉じるか、Enter キーを押して再起動できます。
「Debian」についても、上記同様の処理を行って下さい。
動作確認
Windows ターミナルのドロップダウンメニューから「Alma Linux」をクリックすると新たなタブが追加され、ゲスト OS が起動し、下記の様なパスワード入力待ち状態になります。
Waiting for VM "Alma Linux" to power on...
VM "Alma Linux" has been successfully started.
testuser@localhost's password:
正しく構築されました。
(〃^∇^)o お疲れさま~
余談
Alma Linux の GUI モードをオフにする
root ユーザーに切り替えてsystemctl set-default multi-user.targetを実行
Alma Linux で Web サーバー起動
参考
VirtualBox 登録済の「Alma Linux」への更なる追加設定
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyvm "Alma Linux" --natpf2 "HTTP,tcp,,50080,,80"
VirtualBox 登録済の「Alma Linux」について、新たなポートフォワーディングルールを追加します。
Web サーバー起動
Alma Linux を起動し、root ユーザーに切り替え、下記のコマンドを順次実行します。
# systemctl start firewalld
# firewall-cmd --add-service=http
# systemctl start httpd
ホスト OS のブラウザで閲覧
ホスト OS のブラウザのアドレスバーにhttp://localhost:50080と入力し Enter キーを押すと、AlmaLinux Test Page が表示されます。但し、ゲスト OS に/var/www/html/index.htmlが存在する場合は、そのファイルの中身が表示されます。
