À©µµ¿ì WSL ȯ°æ¿¡¼ ÇÏÀ§ ¸®´ª½º SSH ¿ÜºÎ ¿¬°á ¼³Á¤ ¹æ¹ý
https://bigbangcloud.co.kr/ (1271)https://www.aiocp.co.kr/ (1243)
안녕하세요. 오늘은 윈도우 WSL 을 사용하시는 분들을 위해
SSH 외부 접속 허용을 하는 방법에 대해 알아보겠습니다.
최근 WSL2 엔진을 사용하는 도커 데스크톱을 이용해 윈도우 환경에서 우분투 서버를 활용하다보니,
외부에서 WSL 우분투 안에 있는 컨테이너들을 관리 하려하니, 윈도우 환경이라 SSH 이용이 힘들어서 방법을 알아봤고,
알아본 내용을 공유해드리고자합니다.
우선 가장 먼저 하위 리눅스 시스템에 접속하여 로그인 한 뒤 아래 명령어를 입력해주세요.
sudo apt remove openssh-server sudo apt update sudo apt install openssh-server net-tools |
설치 도중 Y를 눌러 진행하셔서 전부 제거 및 설치를 해주시고,
sudo vi /etc/ssh/sshd_config 를 통해 편집기로 sshd 설정 파일을 열어줍니다.
그럼 아래 사진과 같이 #을 통해 여러 설정 옵션들이 주석처리가 되어있으실텐데요.
그중에서 필요한 것들만 추려서 간략히 설명드리겠습니다.
Port 23232 (기본 값은 22이지만 보안을 위해 개인적으로 설정해주었습니다. 이 값은 추후 포트포워딩 시 참고해야합니다.)
ListenAddress 모든 ipv4의 연결 허용 ListenAddress :: 모든 ipv6 의 연결 허용 PermitRootLogin root 계정으로 직접 로그인 허용 PasswordAuthentication yes 패스워드로 로그인 허용 |
저는 이렇게만 설정해두고 마쳤습니다.
이후
service ssh --full-restart
입력을 통해 ssh 서비스를 재시작해줍니다.
이제 C드라이브에 PSS라는 이름의 폴더를 만들고 메모장으로 파일을 하나 만들겠습니다.
그리고 아래 값을 입력하고 저장해줍니다. 이 때 @( );안에 들어갈 포트는 SSH 로 연결할 포트를 의미합니다.
저는 위에서 23232를 SSH 포트로 설정했기 때문에 해당 포트로 설정하겠습니다.
-----------
$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; } #[Ports] #All the ports you want to forward separated by coma $ports=@(23232); #[Static ip] #You can change the addr to your ip config to listen to a specific address $addr='0.0.0.0'; $ports_a = $ports -join ","; #Remove Firewall Exception Rules iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' "; #adding Exception Rules for inbound and outbound Rules 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"; |
-----------
이제 해당 스크립트가 작동하는지 확인해보겠습니다.
파워쉘을 관리자 권한으로 실행시킨 후 스크립트를 실행하겠습니다.
해당 wsl 통신아이피으로 포트가 성공적으로 포워딩 된 것을 확인할 수 있겠습니다.
만약 해당 스크립트가 실행이 안되신다면, 아래 명령어를 입력해 파워쉘 스크립트 실행 규칙을 설정해주세요.
Set-ExecutionPolicy Unrestricted
Y 입력
그럼 이제 외부 접속을 시도해 정상적으로 윈도우 하위 리눅스 서버에 SSH로 접근이 되는지 확인해볼 수 있습니다.
다만 이 방법은 윈도우가 재부팅되면 값이 초기화되어 파워쉘 스크립트를 다시 실행시켜주셔야하는데요,
여기까지 성공적으로 작동하신 분들은 , 매번 스크립트를 실행시켜주시는 것이 번거로우시면 아래 절차를 따라주세요.
윈도우키 + R 로 실행 창 켜기.
taskschd.msc 입력
작업 스케줄러 - 동작 - 작업 만들기 선택
작업 이름 지정 및 가장 높은 수준의 권한으로 실행 체크
트리거 - 로그온할 때 설정
동작 : 프로그램 시작
프로그램/스크립트 :
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe |
인수 추가(옵션) :
-ExecutionPolicy Bypass -File C:\PSS\portssh.ps1 |
인수 추가의 경우 -File 뒤에 스크립트 파일 경로를 설정해주시고
이후 설정은 컴퓨터의 세부 조건에 따라 다르게 선택하시면 됩니다.
여기까지 마치셨으면, 이후 재부팅 과정에서도 자동으로 스크립트가 적용되어 원활히 외부와의 SSH 통신이 가능합니다.
감사합니다.