파워쉘 프로그램 코드
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}
$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';
if ( $found ) {
$remoteport = $matches[0];
}
else {
Write-Output "The Script Exited, the ip address of WSL 2 cannot be found";
exit;
}
$ports = @(22, 80, 443, 3306);
Invoke-Expression "netsh interface portproxy reset";
for ( $i = 0; $i -lt $ports.length; $i++ ) {
$port = $ports[$i];
Invoke-Expression "netsh interface portproxy add v4tov4 listenport=$port connectport=$port connectaddress=$remoteport";
}
Invoke-Expression "netsh interface portproxy show v4tov4";
파워쉘 파일을 작업 스케줄러에 등록을 합니다. 저는 c:\wsl_config 폴더 아래에 “wsl_port_forwarding.ps1” 로 만들어서 사용을 합니다. 동작 속성을 다음과 같이 설정을 하시면 됩니다.
프로그램 스크립트 : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
인수 추가(옵션) : -ExecutionPolicy Bypass -File .\wsl_port_forwarding.ps1
시작 위치(옵션) : C:\wsl_config
BAT 파일
@echo off
"C:\Windows\System32\bash.exe" -c "sudo service ssh start"
"C:\Windows\System32\bash.exe" -c "sudo service cron start"
"C:\Windows\System32\bash.exe" -c "sudo service apache2 start"
"C:\Windows\System32\bash.exe" -c "sudo service mysql start"
wsl -u root -- service ssh start
BAT 파일도 작업스케줄러에 등록을 합니다. BAT 파일도 C:\wsl_config 폴더 아래에 “wsl_service_start.bat” 파일을 생성하고 등록을 해줍니다.
위에 방법으로도 BAT 파일을 실행을 할 수 있지만, 불안한 부분이 있어서 2중으로 처리를 하기 위해서 작업 스케줄을 통해서 2차로 실행을 할 수 있도록 등록을 하였습니다.
작업 스케줄의 작업 설정을 통해서 bash를 통해서 wsl에 바로 명령어를 실행을 할 수도 있습니다.
프로그램/스크립트 : C:\Windows\System32\bash.exe
인수 추가(옵션) : -c “sudo service ssh start”