WSL에서 구동되는 SSH 서버에 접속하려면 당연히 WSL에 설치한 리눅스 배포판(Ubuntu)이 구동중이어야 하는데, Windows 부팅시 당연하게도(!) 리눅스 배포판이 자동으로 시작되지 않는다. 따라서 Windows 부팅 후 최초 1회는 Bash.exe나 Ubuntu.exe를 실행해서 수동으로 SSH 서버를 시작(sudo service ssh start)해 줘야 한다.
수동으로 SSH 서버를 시작해 줘야 하는 이 절차가 귀찮다면(당연히 귀찮을 것이다..귀찮아야 한다-_-a), 간단한 스크립트를 작성해서 Windows의 시작 프로그램에 등록하고 설정을 살짝 바꿔서 SSH 서버가 부팅시 자동으로 시작되도록 할 수 있다.
SSH 서비스 시작 Batch 스크립트 작성
우선 다음과 같은 Batch 파일을 만들고 시작프로그램 폴더(시작→실행→"shell:startup")에 집어넣는다. (또는, 다른 곳에 저장하고 단축아이콘을 만들어도 된다.)
@echo off "C:\Windows\System32\bash.exe" -c "sudo service ssh start"
참고로, 위 루틴은 Windows 명령 프롬포트 등에서 WSL에 설치된 리눅스로 명령을 보내 실행하려고 할 때 요긴하게 사용할 수 있다. 예를 들어, 명령 프롬포트에서 "C:\Windows\System32\bash.exe" -c "touch /mnt/c/foo.txt"를 실행하면 C:\에 빈 텍스트 파일 foo.txt가 생성된다.
SSH 서비스를 비밀번호 없이 시작할 수 있도록 설정
작성한 sshd.bat를 실행하면 SSH 서버가 시작되긴 하는데, sudo가 포함된 관계로 비밀번호를 입력해 줘야 한다. 따라서 그냥 이대로 놔 두면 다음과 같이 부팅시 비밀번호를 묻는 시커먼 프롬포트가 매번 뜨게 되므로 반절은 Fail이다.
▲ sudo로 명령을 실행할 때 뜨는 비밀번호 프롬포트
이 문제는 service명령을 sudo로 실행할 때 비밀번호를 묻지 않도록 설정하여 해결할 수 있다.
Bash.exe를 실행하고 "sudo visudo"명령으로 sudoers 파일을 열어서 아래쪽 적당한 곳에 다음 구문을 추가해준다. 이렇게 하면 sudo명령으로 service명령을 실행할 때 비밀번호를 묻지 않는다.
%sudo ALL=NOPASSWD: /usr/sbin/service
이제 Windows를 부팅하면 자동으로 SSH 서버 데몬이 실행되므로 언제든지 SSH로 WSL Ubuntu에 접속할 수 있게 된다.
참고: "Missing privilege separation directory..." 문제 해결
일부 해외 포럼에서는 SSH 서버 시작 스크립트를 만들 때 "sudo /usr/sbin/sshd -D"를 사용하라고 소개하는데, 이렇게 하면 스크립트를 실행할 때 다음과 같은 오류가 뜨면서 SSH 서버가 제대로 시작되지 않는다.
Missing privilege separation directory /run/sshd
이는 /usr/sbin/sshd가 SSH 서버 데몬 바이너리가 맞긴 하지만, 실행 절차가 잘못되었기 때문에 발생하는 문제이다. 즉, 데몬을 실행하기 전에 PID파일을 위치시키기 위한 디렉토리를 생성해야 하는데, 이 절차를 건너 뛰고 바로 데몬을 실행하려 해서 오류가 발생한 것이다.
반면, service명령으로 SSH 서버 데몬을 실행하면 initscript가 필요한 사전 동작을 먼저 수행하고 준비가 완료되면 데몬을 구동하므로 문제가 생기지 않는다.
위 오류는 Batch 파일을 작성할 때 /var/run/sshd 디렉토리를 먼저 생성하고 서버 시작 명령를 실행하도록 함으로써 해결 가능하긴 하지만, 어쨌거나 절차상으로는 맞지 않은 임시방편에 불과하므로 본문에서 제시한 service명령(/usr/sbin/service)을 사용하도록 하자.
- [WSL] Windows Subsystem for Linux - 디스플레이 서버 설정 및 GUI 사용하기 (35595)
- [WSL] Windows Subsystem for Linux - SSH 서버 세팅하기 (44947)
- [WSL] Windows Subsystem for Linux - Bash.exe를 Ubuntu와 유사하게 설정하기 (6494)
- [WSL] Windows Subsystem for Linux - 초기 설치와 Ubuntu 배포판 설치 (17303)
- SCP명령어 - 초간단 파일/디렉토리 전송 (41578)
- Ubuntu에서 저장소(Repository) 위치 변경하기 (24515)
- [Ubuntu] 파티션 관리 프로그램 - GParted (23308)
- [Ubuntu] 디스크 마운트하기 (37033)
- Windows에서 Ubuntu로 원격 데스크톱 연결하기 (45602)
- [Ubuntu] 화면캡처 및 작업공간 전환 단축키 (24883)
- Ubuntu에서 PATH 설정하기 (61694)
- 좀 더 '진짜같이' VirtualBox 활용하기 - 심리스 모드 외 (43847)
- Ubuntu 에서 VirtualBox로 Windows 7 설치 및 사용하기 (23736) *1