SSH 전문가처럼: EC2 인스턴스에 격리된 사용자 생성 (문제 없이)
Source: Dev.to
한 서버에 여러 프로젝트를 배포해 본 적이 있다면, 다음과 같은 긴장을 느꼈을 것입니다:
“새로운 것이 기존에 실행 중인 것에 방해가 되지 않게 하고 싶다.”
바로 제가 처한 상황이었습니다:
- 기존 EC2 인스턴스
- 큰 프로젝트를 실행 중인 메인 사용자
- 깨끗하고 안전하게 배포하고 싶은 새롭고 작은 서비스
해결책은 Docker나 Kubernetes가 아니었습니다. 훨씬 간단한—리눅스 사용자 + SSH 키—를 올바르게 사용하는 것이었습니다.
Goal
- 새로운 리눅스 사용자(
cc) 생성 - 해당 사용자 아래에 새 프로젝트 격리
- SSH를 통해
cc로 직접 로그인 - 모든 것을 안전하고 전문적으로 유지 – 해킹도, 지름길도 금지
1. 기존 사용자로 서버에 SSH 접속
ssh your-current-user@your-ec2-ip
2. 새 사용자 만들기
sudo adduser cc # 비밀번호와 선택적 정보를 입력하라는 프롬프트가 표시됩니다
sudo usermod -aG sudo cc # (선택 사항이지만 권장) sudo 권한 부여
이 시점에서 cc 사용자는 존재하지만 아직 SSH로 접속할 수 없습니다.
3. SSH 인증이 어떻게 동작하는지 이해하기
- SSH는 개인 키를 소유하고 있음을 증명합니다.
- 서버는 대상 사용자의
~/.ssh/authorized_keys에 일치하는 공개 키가 있는지 확인합니다. - 공개 키가 목록에 없으면 로그인은 거부됩니다.
cc와 같은 새 사용자는 허용 목록이 비어 있습니다.
현재 SSH 연결을 자세히 확인하려면 다음과 같이 실행해 보세요:
ssh -v your-current-user@your-ec2-ip
다음과 같은 라인이 보일 것입니다:
Offering public key: ~/.ssh/backend-key
이는 노트북이 어떤 개인 키를 사용하고 있는지 알려줍니다. 해당 공개 키는 ~/.ssh/backend-key.pub입니다. 새 사용자에게는 이 키만 사용해야 합니다.
4. cc용 SSH 디렉터리와 authorized_keys 설정
# On the server
sudo mkdir -p /home/cc/.ssh
sudo chmod 700 /home/cc/.ssh
sudo chown cc:cc /home/cc/.ssh
# Create the authorized_keys file
sudo nano /home/cc/.ssh/authorized_keys
로컬에 있는 backend-key.pub 파일 전체 내용을 authorized_keys에 붙여넣고, 권한을 수정합니다:
sudo chown cc:cc /home/cc/.ssh/authorized_keys
sudo chmod 600 /home/cc/.ssh/authorized_keys
5. 새 로그인 테스트
로컬 머신에서:
ssh cc@your-ec2-ip
모든 설정이 올바르면 🎉가 뜰 것입니다. 확인해 보세요:
whoami # 출력: cc
pwd # 출력: /home/cc
6. (Optional) ~/.ssh/config에 단축키 추가
Host cc-ec2
HostName your-ec2-ip
User cc
IdentityFile ~/.ssh/backend-key
이제 간단히 실행할 수 있습니다:
ssh cc-ec2
Benefits of this approach
- 프로젝트 간 완전한 격리 – 별도 환경 및 의존성
- 문제 발생 시 영향 범위 감소
- 확장 가능한 설정 – 성장에 맞게 확장 가능
- 전문적인 보안 – SSH 키는 무차별 대입 및 피싱에 강하고, 클라우드 환경의 산업 표준
- 필요 시 비밀번호 SSH를 완전히 비활성화하고, sudo 용 비밀번호만 남길 수 있음
당신은 단순히 “SSH를 작동시켰다”가 아니라, 전문가가 서버를 구성하는 방식을 구현했습니다: 사용자 수준에서 정체성과 신뢰를 관리하는 것이죠. 이 사고 모델이 잡히면, SSH는 마법이 아니라 다중 서비스 서버를 위한 견고하고 신뢰할 수 있는 도구가 됩니다.
Happy hacking 🚀