WSL(Windows Subsystem for Linux)에서 SSH 서버(sshd)를 띄우는 방법을 정리한다. 예전에 이 주제로 떠돌던 안내 상당수는 WSL1 시절 것이라, WSL2 기준으로 보면 손볼 대목이 있다. 특히 UsePrivilegeSeparation no를 sshd_config에 넣으라는 지시는 오늘날 아무 효과가 없다 — 이유는 아래에 있다.
sshd_config에서 손볼 것
먼저 openssh-server를 설치한다.
sudo apt-get install openssh-server
그다음 /etc/ssh/sshd_config를 열어 필요한 항목을 수정한다.
sudo nano /etc/ssh/sshd_config
PermitRootLogin no— root 계정으로 직접 로그인하는 경로를 막는다. 필요하면 일반 계정으로 접속한 뒤sudo를 쓰는 편이 안전하다.AllowUsers 사용자명— 접속 가능한 계정을 명시적으로 제한한다. 지정하지 않으면 시스템의 모든 계정이 SSH 로그인 대상이 된다.PasswordAuthentication no— 키 기반 인증을 이미 설정했다면 비밀번호 로그인 자체를 꺼서 무차별 대입 공격 표면을 없앤다. 아직 키를 등록하지 않았다면yes로 둔 채 접속을 먼저 확인하고, 그다음 키 인증으로 넘어가는 순서를 권한다.
설정을 바꾼 뒤에는 서비스를 재시작한다.
sudo service ssh restart
UsePrivilegeSeparation은 이제 쓰지 않는다
옛 WSL SSH 안내에는 십중팔구 UsePrivilegeSeparation no를 sshd_config에 추가하라는 줄이 남아 있다. 이 옵션은 OpenSSH 7.5(2017-03-20)에서 폐기(deprecated)됐다. 릴리스 노트는 이 옵션을 없애 권한 분리를 강제하도록 만들었다고 밝힌다 — sshd는 이제 항상 UsePrivilegeSeparation sandbox가 켜진 것처럼 동작하고, sshd_config에 이 지시어가 남아 있어도 무시된다(경고만 뜬다). 즉 이 줄을 넣고 안 넣고는 동작에 아무 차이가 없다. 오래된 글을 참고하고 있다면 이 줄은 그냥 지워도 된다.
WSL2에서 달라진 것
WSL2는 자체 IP를 가진 경량 VM으로 동작해서 WSL1과 네트워킹 그림이 다르다.
-
기본(NAT) 모드 — Windows에서 WSL2 안의 sshd로 접속할 때는
localhost가 그대로 통한다(.wslconfig의localhostForwarding이 기본값true). 반대로 같은 LAN의 다른 기기에서 WSL2로 직접 붙으려면 포트 포워딩이 필요하다. WSL2가 자체 가상 이더넷 어댑터를 갖고 있어서, LAN 쪽에서 보면 WSL1처럼 호스트와 같은 주소로 보이지 않기 때문이다. -
미러링(mirrored) 모드 — Windows 11 22H2 이상에서
.wslconfig에networkingMode=mirrored를 설정하면 네트워킹 아키텍처가 통째로 바뀐다. 이 모드에서는 Windows와 WSL2가 서로localhost(127.0.0.1)로 통신할 수 있고, LAN에서 WSL2로 직접 접속하는 것도 가능해진다. -
systemd — Ubuntu는 기본적으로 systemd를 쓰는 배포판이라 WSL도 최신 버전에서는 이를 지원한다.
/etc/wsl.conf에 아래처럼 적고wsl.exe --shutdown후 다시 켜면 systemd가 올라온다.[boot] systemd=truesystemd가 켜져 있으면 sshd를
systemctl enable --now ssh로 등록해 WSL을 켤 때마다 자동으로 띄울 수 있다. 켜져 있지 않다면 매번service ssh restart처럼 수동으로 올려야 한다.
참고
- OpenSSH 7.5 릴리스 노트 —
UsePrivilegeSeparation폐기와 권한 분리 강제화를 공지한 원문. - Accessing network applications with WSL (Microsoft Learn) — WSL2의 기본 NAT 네트워킹과 미러링 모드의 차이를 설명한다.
- Advanced settings configuration in WSL (Microsoft Learn) —
wsl.conf의systemd=true설정과.wslconfig의networkingMode옵션을 다룬다.