집에 설치한 홈서버는 최대한 직접 사용하지 않고 구석에 배치하고 서버 작업이 필요하다면 내 노트북으로 원격 접속하여 작업하는게 편하고 또 집 밖에서도 작업이 가능하기에 SSH 연결이 가능하도록 해두는게 편하다.
그리고 vscode의 SSH 플러그인을 이용한다면 내 노트북 vscode IDE에서 홈서버의 코드를 수정할 수 있기에 작업률을 올릴 수 있다.
DDNS는 홈 서버 구축 일대기 (2) - SSH 적용
편에서 간단히 나왔었는데
DDNS에 대해 간단히 말하자면 우리집에서 사용하는 IP 주소는 DHCP로 고정된 IP주소가 아닌 유동 IP주소를 사용하기에 언제든 집의 IP주소가 변경될 수 있다. (ISP 업체를 통해 고정 IP주소를 받을 순 있지만 유료이다)
그래서 일부 공유기는 이렇게 변경되는 IP 주소에 대응하는 DNS 주소를 제공하는 기능을 제공하는데 이것을 DDNS(Dynamic DNS)라고 한다.
DDNS의 동작원리
공유기에 DNS 서버를 설치해 두어 도메인주소에 대한 IP 주소를 반환을 하지만 조금 다른점은 공유기에서 IP 주소를 모니터링하다가 IP 주소가 변경되면 DNS 서버에 변경된 IP 주소로 업데이트 하여 최신 도메인 주소가 IP 주소를 가지게 된다.
정말 간단하게 DDNS 옵션으로 들어가 내가 사용할 도메인 이름을 정해주면 된다. 단 공유기가 제공해주는 DDNS를 이용하면 최상위 도메인은 정해져있다.
그러면 이제부터 burimi.asuscomm.com
주소로 외부에서 내 공유기까지 접근이 가능해졌다.
외부에서 공유기까지는 접근이 가능해졌고, 이제는 외부에서 내 홈 서버까지 접근을 가능하도록 하기위해 포트 포워딩을 해야한다.
(공유기까지 접근이 되면 홈서버까지도 접근이 가능한거 아닌가? 생각이 든다면 NAT 기술에 대해 찾아보는 것을 권장한다)
SSH는 기본적으로 22번 포트를 사용하지만 외부에서 접근할때도 22번 포트를 그대로 사용한다면 보안상 좋지 않다. SSH는 원격 접속하는 기능이기에 최대한 SSH를 사용할 포트는 은닉하는게 좋다.
포트 포워딩 역시 쉽게 설정이 가능하다. 외부 포트에는 본인이 사용할 포트 번호를 사용하고 내부에는 22번 포트로 포워딩을 해주고, 내부 IP 주소 (내 서버주소)를 입력하면 된다.
그럼 만약 외부 포트 50번을 사용하면 burimi.asucomm.com:50
으로 접근하면 내 서버의 22번 포트로 접근이 된다.
홈 서버에 SSH 설치를 해주고 설정하면 된다. 이때 기본 설정값을 이용한다면 내 도메인 주소, 개방된 SSH 포트번호, 리눅스 서버 계정, 패스워드를 알고있다면 접근이 가능해진다.
개인적으로 보안을 더 신경쓰기 위해 SSH로 root 로그인은 허용 ❌, 공개키를 이용해서만 접근이 가능하도록 했다.
/etc/ssh/sshd_config
해당 config에서 본인이 원하는 설정을 하면 된다.
비대칭키 전달 방법
공개키로만 접근이 가능하려면 내 노트북에서 비대칭키를 발급한 후 private key를 홈서버에 전달해야하는데
이때 SCP(Secure Copy Protocol)
를 이용하여 private key 파일을 SSH를 통해 파일을 홈 서버에 복사시킬 수 있다.
발급한 비대칭키의 public key를 내 맥북의 ~/.ssh
위치에 저장한 후 ~/.ssh/config
파일에 아래 내용을 추가해준다.
맥북의 ~/.ssh/config 파일은 SSH 클라이언트의 설정을 관리하는 데 사용되는 구성 파일이기에 해당 내용을 추가한다면 이제 간단하게 ssh burimi
명령어로 SSH 접속이 가능하다!
Remote - SSH
를 설치하면 이제 vscode에서 ssh로 접속하여 IDE에서 파일 수정이 가능하다!
원격 접속할 서버에 ->
를 클릭하면 vscode로 원격접속이 가능하다!
아마 SSH로 원격접속 하여 처리하다 보면 sudo
권한으로 처리하는 경우가 생기게 된다. 그렇다면 해당 디렉토리/파일의 소유권은 root:root
로 되고, 권한은 umask값에 따라 다르지만 기본 umask 값이 002이기에 디렉토리/파일의 권한은 775가 될 것이다.
그렇다면 write 권한이 없기에 vscode에서 파일을 수정해도 저장이 안되는 문제가 생긴다.
원하는 수정할 파일/디렉토리의 소유권을 root가 아닌 유저에게 위임시킨다.
sudo chown -R {유저이름}:{그룹이름} {파일명/폴더명}
원하는 수정할 파일/디렉토리의 권한을 모두 허용한다
sudo chmod -R 777 {파일명/폴더명}
유저의 그룹을 root 그룹에 넣는다.
sudo usermod -aG root {유저이름}
그러면 권한 문제가 발생하면 해결할 수 있을것이다.
이제 기본적인 세팅은 모두 끝났고 다음 포스팅은 SSL/TLS 적용에 대해 포스팅할 예정이다.