On-Premise: 보조 PC 서버 컴퓨터로 만들기 (1)
1. 계기
프로젝트를 이것저것 진행해며 배포를 위해 클라우드를 많이 사용해왔는데, 비용적으로나 성능적으로나 제한이 많았습니다
- GCP
많은 크레딧을 지원해줘 프로젝트 규모에 맞게 적절한 Scale-Up이 가능하지만, 2개월만 지원되기에 장기적 배포 불가능 - AWS
프리티어로 지속적으로 무료 이용이 가능하지만, 규모가 큰 서버나 프로덕션 레벨에는 적절하지 않음
이런 문제들을 겪었고 어떤 프로젝트든 결국 배포를 중단해야 하는 문제가 생겼어요
그러다 문득, 이전에 송출용 컴퓨터로 사용하려고 놔뒀던 PC를 서버 컴퓨터로 쓰면 어떨까? 하는 생각이 들었어요
2. 리눅스 설치
OS로는 Debian을 선택했어요.
클라우드 환경을 사용하며 Debian이 익숙했던 것도 있고, 안정성이 높아 서버용 OS로 적합하다고 생각해서입니다
또한 GUI는 그다지 필요 없다고 생각하며 리소스 사용량 역시 줄이기 위해 CLI로 설치했습니다
설치 과정은 그저 따라가면 되니 생략하겠습니다 😅
몇몇 이슈가 있긴 했는데 이 부분은 나중에 링크로 추가 정리 해두겠습니다 😊
그리고 설치 결과..!

CLI라 조금 휑한 느낌이 들긴 하지만, 그래도 성공적으로 설치가 완료되었습니다!
3. SSH 설정
서버 컴퓨터에 직접 붙어서 작업할 것이 아니기 때문에 외부에서 접속할 수 있도록 적절한 설정이 필요했습니다
원격 작업을 위해 SSH 서버를 설치하였습니다
apt-get install openssh-server
설치를 완료하였으면 이제 SSH 서버에 대한 설정을 해볼게요
설정 파일은 /etc/ssh/sshd_config 입니다

파일을 열어보면 거의 모두 다 주석 처리가 돼있을거에요
Port 영역에서 임의의 포트를 지정하고, ListenAddress를 0.0.0.0으로 함으로써 모든 주소에서 접속이 가능하도록 하였습니다
(SSH의 기본 포트는 22지만, 보안성을 높이고 무분별한 접근을 제한하기 위해 임의의 포트로 변경했습니다)
하지만 이렇게 하면 보안적으로 큰 이슈가 생기겠죠 ?
저의 경우는 보안을 위해 공개 키 암호 방식과 Google OTP를 사용하였는데, 일단은 공개 키 암호만 설명드릴게요 !
공개 키 암호 인증을 위해 클라이언트 PC에서 위해 ECDSA 키를 생성합니다
ssh-keygen -t ecdsa -b 521
생성 시 비밀번호를 설정할지 물어보는데, 저는 별도의 비밀번호를 사용하지 않았습니다
비밀번호에 OTP 번호까지 입력하기에는 너무 번거로워 보였어요 🥲
생성된 공개 키 암호를 서버 PC의 ~/.ssh/authorized_keys 에 Public Key를 추가해줍니다 (id_ecdsa.pub)
만약 파일이 존재하지 않는다면 해당 디렉토리에 authorized_keys를 생성하고, 내부에 추가해줍니다
이제 설정을 바꿔줄게요 !
공개 키 암호 인증만 활성화 시 sshd_config 설정은
# sshd_config
AuthenticationMethods publickey
PubkeyAuthentication yes
이 두 가지만 활성화해주면 됩니다
그리고 선택적으로 root 사용자로 로그인을 허용하고 싶다면 PermitRootLogin을 활성화해줍니다
해당 내용을 반영하기 위해 systemctl restart sshd를 통해 SSH 서버를 재시작해요 !
보통의 경우 여기까지 진행하면 정상적으로 SSH 연결을 할 수 있어요
하지만 공유기나 별도의 NAT 환경을 이용한다면 SSH 연결을 정상적으로 처리하기 위해 추가적인 과정이 필요하답니다
4. 포트포워딩, UFW 설정
필자의 경우 공유기를 사용중이었기 때문에, 보안 접근을 위해 적절한 포트포워딩과 방화벽(UFW) 설정을 해야했어요

저는 IPTIME 공유기를 이용하기에 이와 같이 설정했어요 (추후에 더 다양한 보안 기능이 있는 공유기로 바꿔볼까 해요)
외부 포트와 내부 포트를 일치시켜 NAT 환경에서 적절히 내부 포트와 연결될 수 있도록 했습니다
⚠️ sshd_config에서 설정했던 포트와 일치하도록 포트포워딩을 해줘야해요 !
이제 SSH 연결 테스트를 해보면

짜잔! 잘 연결됩니다 🥰
다음번엔 SSH 인증에 Google OTP를 연동하는 법에 대해 이야기 해 볼게요 !