WSL(윈도우 내 리눅스) 에서 데몬 유지 및 sshd 서버 돌리기

먼저 WSL의 특징을 설명하겠다.
일단 리눅스기 때문에 백그라운드 서비스, 즉, 데몬도 존재하며, 똑같이 돌아간다.
하지만 윈도우에서 bash 프로세스가 하나도 없으면, 리눅스 서비스는 다 죽고 리눅스 전원이 꺼진 것이나 다름없다.
그래서 윈도우를 키자마자 리눅스 서비스를 돌리고 싶으면 윈도우 시작하자마자 bash 프로세스를 돌려야 한다.
이를 기초하여 SSH 서버 데몬을 돌림으로 리눅스의 기능을 윈도우 시작 때부터 유지하는 방법을 설명하도록 하겠다.
이를 잘 정리한 링크로부터 출처를 가져왔다.

How to run sshd as a windows service ? #612
How to run Ubuntu service on Windows (at startup)?

  1. 윈도우에서 bash 실행한다.
  2. sudo dpkg-reconfigure openssh-server 실행하여 SSH 호스트 재구성한다.
  3. sudo nano /etc/ssh/sshd_config 실행하여 SSH 설정 파일 편집에 들어간다.
  4. UsePrivilegeSeparation 항목을 찾아 옆에 yesno로 변경
    (이유는 UsePrivilegeSeparation 옵션은 chroot() 호출을 WSL에서 아직 지원하지 않기 때문)
  5. 비번으로 접속하고자 할 경우 PasswordAuthentication 항목을 찾아 (없으면 추가) yes로 세팅.
    (만약 없으면 SSH 접속할 경우 키 파일을 요구함. 유저 파일에 키를 생성하고 클라이언트도 가지고 있어야 함.)
  6. ctrl+O 단축키로 저장 후 ctrl+X 로 편집기를 빠져나간다.
  7. sudo visudo 실행하여 sudo 권한설정 파일을 편집한다.
  8. 적당한 줄을 찾아 $USER ALL = (root) NOPASSWD: /usr/sbin/sshd -D 문구를 추가한 후, $USER를 로그인 이름으로 바꾼다.
    (로그인 이름 알고싶으면 pwd ~/ 쳐서 /home/ 뒤 명칭을 봐라.)
  9. 단축키로 저장 후 나가서 메시지 뜬 게 있는지 확인하고, 메시지 나올 경우 visudo 오류이므로 적절히 수정하여 해결한다. (모르면 검색해라.)
  10. (옵션) SSH 서버를 외부에서 접속하고 싶은 경우, 윈도우에서 방화벽에서 포트번호 22를 허용한다. (개인 및 도메인 범위까지 한다. 공용 말고)
  11. 윈도우 시작 시 SSH 서버를 돌리기 위해 (적당한파일명).vbs 파일을 메모장이나 아무 편집기로 생성 후 아래 내용을 넣는다.
set ws=wscript.createobject("wscript.shell")
ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/sshd -D'",0
  1. 저장했으면, 모든 bash 프로세스를 끄고(리눅스 실행 모두 다 종료) vbs 파일을 더블클릭 후 PuTTY 등으로 SSH 접속 되는지 확인한다.
  2. 성공했으면 bash.exe 프로세스 종료 후, 위 vbs 파일을 작업 스케줄러에 등록한다. (모르면 좀 검색하고). 물론 “시스템 시작시”에.
    (시스템 시작 시, 파일은 vbs파일 다이렉트 호출, 사용계정은 반드시 로그인할 계정. LOCAL SERVICE 같은 시스템계정 말고. 암호 저장 안해도 됨.)
  3. 윈도우 껐다 킨 후 PuTTY로 SSH 접속 되는지 확인해서 접속 되면 이제 윈도우와 리눅스는 한몸으로 실제처럼 돌아갈 것이다. 서비스도 다.

왜 굳이 vbs로 하냐고? 물론 bat 파일 쓰거나 직접 작업 스케줄러에 등록할 수는 있어.
근데 작업 스케줄러던 bat 등록하던 뭘 하던 도스창 뜬다. 너같으면 좋겠냐? vbsws.run 에 두번째 0 인자가 바로 창 안띄워 주는 고마운 인자다.
내가 필요 시 즐겨쓰는 놈이기도 하지. 이제 리눅스 VM으로 깔 필요도 없다. 편리하다.

끗.

composite / 2017년 8월 25일 / Piss Development
태그:, , , , , , , ,

답글 남기기

Your email address will not be published / Required fields are marked *