Post

WSL Ubuntu OpenSSH

오늘은 이전에 설치한 WSL Ubuntu 환경에 OpenSSH를 설치하여,
외부 PC에서도 접속할 수 있도록 설정해보겠습니다.


Open SSH 설치

일단 wsl 환경으로 Ubuntu를 설치할 경우 자동으로 ‘openssh’가 설치되어 있는 경우가 있습니다.
하지만 원할한 진행을 위해 한 번 완전히 제거한 후 재설치하여 진행하겠습니다.

1
2
3
4
5
6

  sudo apt remove openssh-server  # openssh server 제거
  sudo apt update # apt 목록 업데이트
  sudo apt install openssh-server # #openssh-server 설치

이 명령어를 순서대로 실행하시면 ‘openssh-server’가 정상적으로 재설치 됩니다.
혹시 모르니 Openssh-server의 현 상태를 확인한 뒤에 진행해주는 게 좋습니다.

1
2
3
sudo service ssh status

대부분 ssh 서버가 작동하지 않다는 문구가 출력될 텐데, 혹여나
다른 실행 중이라고 출력되신 분들은 문제는 없으니 그대로 진행하셔도 됩니다.
다만 에러가 발생하신 분들은 에러 내용을 확인 해보시고 해결하신 후에 진행 해주셔야 합니다.

SSH 설정

제가 혼자 진행하면서 가장 어렵다고 느낀 부분 중 한 부분입니다.
처음 써보는 리눅스 환경에서의 설정 수정에서 어려움을 느꼈고,
처음 보는 속성들이 많아 실제 서버를 오픈하는데 걸린 시간보다 구글링하는데 소요된 시간이 길었습니다.


그렇게 이것저것 해보면서 겪은 것이나, 알게 된 것들을 최대한 쉽게 정리해보겠습니다.
일단 설정 파일의 위치는 아래와 같습니다.

1
sudo cd etc/sshd

sshd폴더 안에서 ls 명령어를 실행하시면 갖가지 폴더와 파일읋 확인하실 수 있을텐데,
이번에 수정 해야할 파일은 ‘sshd_config’입니다.

1
sudo nano sshd_config

nano를 앞에 붙여 명령어를 실행하시면 리눅스 텍스트에디터… 라고 해야할까
수정파일을 편집할 수 있는 상태로 진입하게 됩니다.
온갖 주석과 알 수 없는 항목들 중에서 저희가 수정해야할 건 아래와 같습니다.

1
#Port 22

이렇게 ‘Port’가 주석처리 되어있습니다.
주석을 해제 해주신 뒤 , ‘ctrl + w’로 원하는 글자를 찾을 수 있습니다.
‘PasswordAuthentication’ 을 입력하시면 바로 수정해야 할 항목으로 이동할 수 있습니다.

1
PasswordAuthentication yes

No로 설정되어있는 항목을 yes로 변경해주시면 됩니다.
변경한 두 항목에 대해 간단히 설명하자면,
Port 항목은 ssh 서버가 사용할 포트를 설정하는 항목입니다.


그리고 PasswordAuthentication 항목은 ssh 로 접속하려는 사용자들에게 비밀번호 인증을
받을 것인가 말 것인가를 결정하는 항목입니다.
만약 처음값인 No로 설정이 되어있다면 나중에 ssh로 접속할 때
public key error이 발생할 수도 있기에 비밀번호 인증을 받는 것으로 설정했습니다.


여기까지 설정을 하셨다면 ssh server를 실행시키겠습니다.
ssh server가 실행중이 아니셨던 분들은,

1
sudo service ssh start

반대로 이미 실행중이셨던 분들은,

1
sudo service ssh stop

위 명령어들을 각자 상황에 맞게 입력해주시면 됩니다.

포트포워딩

제가 잘 몰라서 그랬던 거겠지만 이번에 서버를 구축하면서 가장 오래 걸렸던 부분입니다.
포트포워딩 단어 자체가 생소했던지라 간략하게나마 ‘포트 포워딩’을 정리해보자면,


가장 먼저 ‘외부 IP’와 ‘내부 IP’를 알아야 합니다.
기본적으로 내부 IP는 흔히 아는 방법인, 명령 프롬포트에서 ipconfig 명령어를 통해
알 수 있습니다.
반대로 외부 IP는 포털 사이트를 사용하거나 네트워크 관리페이지에서 확인할 수 있습니다.


일단 저희의 구조를 생각해보면 제 window 내부에 있는 wsl에서
Ubuntu SSH 서버가 있습니다.
그리고 제 목표는 외부 PC에서 window IP를 통해 서버에 접속시키는 것이죠.

그럴 때 사용하는 게 포트 포워딩입니다.
외부 PC에서 저의 외부 IP를 통해 내부 IP로 접속한 후 최종적으로 WSL 의 IP로 연결시키는 것이죠.
쉽게 말하자면 포트의 ‘이정표’라고 생각하시면 될 것 같습니다.


먼저 외부 IP에서 내부 IP로 포트포워딩을 시키려면 현재 사용중인 네트워크 공유기의
관리자 페이지로 접속을 해야합니다.
접속하는 방법은 사용중이신 공유기의 제조회사 별로 다르기에 인터넷에서 직접 검색해보시는 게 편하실 겁니다.

제가 사용중인 공유기는 LG U+ 입니다.
관리자 페이지에서 보면 일반 포트 포워딩과 DMZ 포트 포워딩이 있습니다.
그리고 제 IP 정보를 예시로 적어보면 아래와 같습니다.

1
2
3
4
192.168.XXX.XXX # 내부 IP 
138.148.XXX.XXX # 외부 IP

이렇게 구성되어 있을 때 포트포워딩에 ‘내부 IP’로 설정을 해주시고,
저희가 사용해야 할 포트를 적어주시면 됩니다.
이렇게 설정이 되면 외부 PC에서 외부 IP를 통해 저한테 접속하면 자연스레 내부 IP로 연결됩니다.


여기까지 별 에러 없이 진행되셨다면 외부 IP를 통해 내부 IP로 접속되도록 설정은 끝이 났습니다.
이제 해야할 것은, 내부 IP에서 ‘WSL 의 IP’로 포트포워딩을 해줘야 합니다.
WSL 의 Ubuntu는 저희가 만들어낸 가상환경이지만 IP를 가지고 있습니다.

하지만 다이렉트로는 연결할 수 없기에 내부 IP에서 Ubuntu IP로 연결을 해주어야 합니다.
하는 방법은 그래도 생각보다 간단합니다.
일단 ‘powershell’을 관리자 모드로 실행시킵니다.

그런 뒤 아래와 같이 명령어를 입력해주시면 됩니다.

1
netsh interface portproxy add v4tov4 listenport=$port listenaddress='0.0.0.0' connectport=$port connectaddress=$ipaddress

$ 가 붙은 단어들에는 자신의 환경에 맞는 값을 넣어주시면 됩니다.
이 명령어는 내부 ip를 통해 들어오는 연결을 $ipaddress 로 연결시켜주는 명령어입니다.
정상적으로 저장이 되었나 확인하기 위해,

1
2
3
netsh interface protproxy show all

명령어를 입력하시면 위에서 입력한대로 설정이 되어있는 걸 확인할 수 있습니다.

SSH 접속

접속은 간단합니다.
일단 테스트를 위해 Ubuntu 환경에서 아래의 명령어를 통해 Local Host에 SSH로 접속을 해보겠습니다.

1
sudo ssh user_name@localhost

여기서도 갖가지 에러가 발생할 수 있는데 제가 겪은 에러는 위에서 언급했던,
public key에러입니다. 만약 다른 에러가 발생하신 분들은 구글링을 통해 찾아보시길 바랍니다.

별 다른 에러 없이 정상적으로 ssh 연결에 성공하셨다면 이제 외부 PC에서 접속하겠습니다.
window의 명령프롬포트를 실행시킨 후 아래와 같이 입력해보겠습니다.

1
ssh user_name@접속하려는 PC의 외부 IP -p $port_num

각 환경에 맞게 값을 넣으시라고 위와 같이 작성했는데,
예시로 제 환경을 기준으로 한 번더 작성해보겠습니다.

1
ssh server@138.140.XXX.XXX -p 22


만약 별 문제가 없다면 곧바로 server@ipaddress에 대한 비밀번호를 입력하라고 출력됩니다.
각 계정의 알맞은 비밀번호를 입력하시면 연결 성공입니다.

마무리

정리는 일단 해보았지만, 아직 부족한 점이 많습니다.
사실 위에서 포트포워딩을 자동으로 설정해주는 스크립트도,
그리고 SSH연결 뿐만아닌 FTP연결도 바로바로 해보고 싶었지만, 아직 SSH연결도 제대로 이해하지 못한 것 같아,
다음으로 미루게 되었습니다.


그래도 다음 포스팅엔 FTP서버 연결을 주제로 찾아뵙겠습니다.
부족한 글 읽어주셔서 감사합니다.

This post is licensed under CC BY 4.0 by the author.