타임트리

[WSL] 윈도우 부팅 시 자동 실행 및 SSH 포트 프록시 본문

기타

[WSL] 윈도우 부팅 시 자동 실행 및 SSH 포트 프록시

sean_j 2025. 1. 1. 05:51

 

평소에 WSL(Windows Subsystem for Linux 2)을 자주 사용하다 보니, 매번 수동으로 실행하는 게 번거롭다고 느꼈습니다. 특히 개발 환경을 자주 세팅하거나 반복적인 작업을 할 때 이 과정이 생각보다 불편하더라고요. 그래서 윈도우 부팅 시 WSL을 자동으로 실행하도록 설정하는 방법을 알아보았습니다.

 

추가로, 만약 SSH 서버 접속을 위해서는 매번 달라지는 ip를 잡아줘야 하고, 이를 반영해서 WSL2의 네트워크 환경과 윈도우 호스트 간 포트 프록시 설정이 필요합니다. (WSL2는 가상 네트워크를 사용하기 때문에 WSL2가 실행될 때마다 동적 IP가 Hyper-V의 NAT(Network Address Translation) 네트워크에 의해 할당됩니다. 따라서 WSL2를 재시작할 때마다 IP주소가 달라지기 때문이죠..)

 

따라서 이번 포스팅에서는 WSL2를 자동 실행과 함께 달라지는 IP를 추출하고 SSH 포트 프록시를 자동으로 설정하는 방법을 공유하려고 합니다.

1. 부팅 시 WSL2 자동 실행

먼저, 윈도우 부팅 시 자동으로 WSL2를 실행하고, ssh 서버를 시작하도록 하는 간단한 배치 파일(wsl_sshd.bat)을 작성하고 이를 Windows 시작 프로그램에 등록합니다.

 

Win+R키를 눌른 다음, shell:startup을 입력해 시작프로그램 폴더로 이동합니다. 해당 경로에 wsl_sshd.bat이란 이름으로 아래 내용을 작성합니다. (이름은 변경 가능합니다)

@echo off
"C:\Windows\System32\bash.exe" -c "sudo service ssh start"

2. WSL2 SSH 접속을 위한 포트 공유 설정 스크립트 준비

아래처럼 SSH 설정 포트 프록시 위한 PowerShell 스크립트를 작성합니다. 입니다. 이 스크립트는 WSL의 IP 주소를 감지하고, 지정된 포트(예: 30000)에 대한 포트 프록시를 설정합니다.

스크립트 내용: 원하는이름.ps1

# WSL2의 IP 주소 추출
$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{
  echo "The Script Exited, the ip address of WSL 2 cannot be found";
  exit;
}

# 사용할 포트 설정 (SSH 포트)
$ports=@(30000);

# 수신 대기 주소 설정
$addr='0.0.0.0';
$ports_a = $ports -join ",";

# 기존 방화벽 규칙 제거
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";

# 방화벽 규칙 추가 (포트 허용; Inbound, Outbound 모두)
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";

# 포트 프록시 설정
for( $i = 0; $i -lt $ports.length; $i++ ){
  $port = $ports[$i];
  iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
  iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}
# 설정 확인
Invoke-Expression "netsh interface portproxy show v4tov4"

3. 작업 스케줄러에 스크립트 등록

윈도우 작업 스케줄러를 이용해 위 스크립트를 부팅 시 자동으로 실행되도록 설정합니다. (윈도우 → 작업 스케줄러 검색)

작업 스케줄러 설정 방법:

  1. 작업 생성
    • 작업 스케줄러를 열고, 동작 → 작업 만들기
  2. 설정값

일반탭 설정 화면

  • 일반
    • 사용자가 로그온할 때만 실행
    • 가장 높은 수준의 권한으로 실행

  • 트리거
    • 작업시작: 로그온할 때
    • 작업 지연 시간: 30초
    • 사용 체

동작탭 설정 화면

  • 동작 → 새로 만들기
    • 동작: 프로그램 시작
    • 프로그램/스크립트: (본인의 powershell 경로) C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
    • 인수 추가(옵션): noprofile -executionpolicy bypass -file (앞서 작성한 스크립트 full path)

 

4. 결과 확인

위 과정을 완료하면 윈도우 부팅 시 WSL이 자동으로 실행되며, 설정된 ssh 포트가 프록시를 통해 연결됩니다. 만약 변경이 필요하다면 위 스크립트를 수정해서 방화벽 규칙과 포트 설정을 동적으로 관리할 수 있습니다.


마무리

이 설정 덕분에 윈도우를 켤 때마다 WSL과 SSH 연결을 수동으로 실행하던 번거로움에서 벗어날 수 있었습니다. 한 번 적용해 두면 이후로는 신경 쓸 일이 거의 없어 설정이 처음에는 조금 복잡하게 느껴져도 시도해보시길 바랍니다.

'기타' 카테고리의 다른 글

[키보드] 키 위치 변경하기  (1) 2023.03.28