[WSL]ssh wsl 접근 설정 하기
*WSL 설치가 되어있다는 가정하에 진행 합니다.
프로세스 과정
1.wsl ssh 서버 설치
2.wsl ssh 서버 설정
3.SSH 공개키 적용
4.윈도우 방화벽 설정
5.윈도우 포트와 WSL 포트 포워딩 설정
6.테스트 및 사용
<WSL SSH 설정>
OpenSSH 서버 설치
sudo apt remove openssh-server
sudo apt update
sudo apt install openssh-server
기존에 설치되었던 과거것을 없애고 새로 하는 경우로 진행(변수 제거 용)
OpenSSH 서버 설치 확인 차원 ( SSH 서버 시작 )
sudo service ssh start
sshd 서비스가 실행 중인지에 대한 정보를 출력
sudo service ssh status
활성화 상태 (running): SSH 서버가 실행
비활성화 상태 (inactive): SSH 서버가 실행 중이지 않습니다.
위 상황까지 왔을때 활성화가 잘되었다면 아래 실행
SSH 서버 자동 시작 설정
sudo systemctl enable ssh
< SSH 서버 설정>
sudo vi /etc/ssh/sshd_config
ssh 서버 포트 변경(기본 22)
수정 저장 입력 부분은 vi로 진행한것임으로 vi 명령어 참고
기타 옵션 (굳이 설정은 상황에 맞춰서)
# 특정 IP 주소만 허용
AllowUsers username@IP_address
# 루트 로그인 활성화 여부 처리
PermitRootLogin {yes/no}
# 비밀번호 인증 비활성화 처리
PasswordAuthentication {yes/no}
-
SSH 접속 포트 : 기본 포트인 22번이 외부망에 개방되면 무작위 접속 시도가 끊임없이 들어오므로 바꿔주는 것이 권장된다. 공유기 하단에 호스트를 위치시켜 포트포워딩을 사용하는 방법도 있다. 포트를 바꿨다면 호스트의 방화벽 설정 또한 수정해야 한다.
-
키 인증 접속 허용 여부 : 비밀번호를 입력하는 과정이 물리적으로 노출될 수 있으니 공개키/개인키 쌍을 생성하여 개인키를 가진 단말에서만 접속을 허용하는 것이 권장된다.
-
비밀번호 사용 접속 허용 여부 : 위와 마찬가지의 이유로, 가급적 키 인증 접속만 허용하고 비밀번호 사용 접속을 차단해두는 것이 좋다.
-
비밀번호 없이 접속 허용 여부 : 비밀번호가 없으면 보안 셸을 사용할 이유가 없다. 반드시 차단해두자.
-
루트(관리자) 접속 허용 여부 : 루트를 개방하는 것은 시스템을 완전히 개방하는 것이다. 루트 접속은 차단하고 일반 계정으로 접속해 슈퍼유저 권한을 받아 사용하는 습관을 들이자.
-
공개키 파일 이름 : 기본적으로 authorized_keys를 사용하도록 되어 있다. 다른 파일 이름을 사용하고 싶을 경우 변경해도 무방하지만, 타인의 계정도 같은 파일 이름을 사용하도록 해야 한다.
SSH 서버 재시작
변경 사항 저장 및 반영을 하기 위해서
sudo service ssh restart
서버 적용 확인 체크 방법1
netstat -an | grep {ssh 적용 포트}
위 명려어 결과 가 나왔을때의 상태 값이 LISTEN인지 확인
서버 적용 확인 체크 방법2
윈도우에서 telnet을 이용하여 해당 포트가 열렸는지 확인을 진행한다.
telnet {wslIp} {SSL 서버포트}
Open-SSH 블라블라가 나온다면 윈도우에서 wsl의 ssh 서버로 접근이 가능하다는 것이다.
wsl 주소는 ifconfig 명령어를 통해서 확인
<SSH 공개키 적용>
1. 나의 로컬 공개키 만들기
$ ssh-keygen -t <암호화 알고리즘> -b <암호화 비트>
Generating public/private rsa key pair.
Enter file in which you want to save the key (<계정의 홈 디렉토리>/.ssh/id_rsa): <- 일반적으로 기본값을 그대로 사용한다
Enter passphrase (empty for no passphrase): <- 비워도 문제는 없지만, 개인키 파일이 유출될 경우를 대비해 비밀번호를 걸어두도록 하자
Enter same passphrase again: <- 위의 비밀번호를 재입력한다
Your identification has been saved in <홈 디렉토리>/.ssh/id_rsa. <- 개인키 파일. 파일 이름에 암호화 알고리즘 이름이 붙고, 확장자가 없다
Your public key has been saved in <홈 디렉토리>/.ssh/id_rsa.pub. <- 공용키 파일. 마찬가지로 암호화 알고리즘 이름이 붙고, pub 확장자가 있다
The key fingerprint is:
SHA256:<SHA256 해쉬 값> <계정 이름>@<생성작업을 진행한 컴퓨터의 hostname>
The key`s randomart image is:
+---[RSA 2048]----+ <-- 알고리즘 종류
| .. +o+. |
| . o.o.o. |
| . ..+..... . |
| o.=+ .+. o |
| o=oo.BooS . | <-- 생성된 키를 표현하는 텍스트 그림
| .ooo.o%+.. E |
| .o== o. |
| o.+ |
| +* |
+----[SHA256]-----+ <-- 해쉬
공개키 생성 확인 위치는 만들어질 때 로그에 나오니 참고
일반적으로 사용자의 홈디렉토리의 {사용자}/.ssh
id_rsa(개인키, privateKey)
id_rsa.pub(공개키 , publicKey)
2. 공개키 ssh 서버가 되는 wsl에 넣어주기
wsl 서버에서 아래의 사항 진행
mkdir -p ~/.ssh
# /.ssh가 없는경우
chmod 700 ~/.ssh
#권한 설정 진행
echo {만들어진 공개키 값} >> ~/.ssh/authorized_keys
# 내 로컬 공개키를 해당 서버에 저장하기 위해서
chmod 600 ~/.ssh/authorized_keys
#권한 설정 진행
<윈도우 방화벽 설정>
특정 포트는 SSH 서버 포트와 동일하게 열어주어야 한다.
이름과 설명은 자유롭게 작성
위 과정이 끝나면 작성한 이름으로 열린 포트가 있는지 확인을 한다.
<윈도우 포트와 WSL 포트 포워딩 설정>
이제 우리가 해야 할 것은 포트 포워딩이다
WSL에서 사용할 SSL서버 포트(설정 완료)
포트 포워딩(진행)
윈도우 포트 방화벽 해제(설정완료 )
PowerShell에서 실행
netsh interface portproxy add v4tov4 listenport=${윈도우 개방포트} listenaddress=${연결받을주소} connectport=${wsl 주소} connectaddress=${ssl서버포트}
예시
netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=127.0.0.1
확인법
netsh interface portproxy show all
잘못 만들었을시 삭제방법
netsh interface portproxy delete v4tov4 listenport=22 listenaddress=0.0.0.0
<SSH 접속>
ssh 유저명@윈도우 서버 아이피
- -p: 원격 서버의 SSH 포트 번호를 지정합니다.
기본 포트 번호인 22번이 아닌 다른 포트 번호를 사용하는 경우에 입력합니다.
참고한 글들