Ubuntu 서버 초기 설정 ① — SSH 키 인증과 root 비활성화
서버를 처음 받으면 가장 먼저 해야 할 일은 앱 설치가 아니라 문 잠그기다.
VPS를 결제하고 나면 "빨리 뭔가 올려보고 싶다"는 마음이 앞선다. 하지만 지금 이 순간에도 전 세계 봇이 22번 포트를 두드리며 root 비밀번호를 무차별 대입하고 있다. 문을 잠그고, 열쇠를 바꾸고, 기존 열쇠를 폐기하는 것이 가장 먼저다.
이 시리즈는 Ubuntu 24.04 LTS 기준으로 진행한다. 다른 버전이라도 대부분 동일하게 적용할 수 있다.
Ubuntu 서버에 처음 접속하는 방법
VPS를 생성하면 호스팅 업체가 IP 주소와 root 비밀번호(또는 SSH 키)를 제공한다. 터미널을 열고 접속한다.
# Windows: PowerShell 또는 Windows Terminal
# macOS/Linux: 기본 터미널
ssh root@서버_IP_주소
처음 접속하면 Are you sure you want to continue connecting?이라는 메시지가 나온다. yes를 입력하면 된다. 이후 비밀번호를 입력하면 접속 완료다.
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-xx-generic x86_64)
root@server:~#
root@server:~# 프롬프트가 보이면 성공이다. 🎉
💡 호스팅 업체별 접속 정보 위치: - Vultr / DigitalOcean / Linode — 대시보드에서 서버 클릭 → IP, 비밀번호 또는 SSH 키 확인 - AWS EC2 — 인스턴스 생성 시 다운로드한
.pem키 파일로 접속:ssh -i key.pem ubuntu@IP- Oracle Cloud — EC2와 동일. 기본 사용자는ubuntu
apt 패키지 업데이트
서버에 접속했다면 무조건 첫 번째로 패키지를 업데이트한다. 호스팅 업체가 제공하는 이미지가 최신이 아닐 수 있기 때문이다.
apt update && apt upgrade -y
| 명령어 | 역할 |
|---|---|
apt update | 패키지 목록을 최신으로 갱신 |
apt upgrade -y | 설치된 패키지를 최신 버전으로 업그레이드 (-y는 자동 승인) |
커널 업데이트가 포함됐다면 재부팅이 필요할 수 있다.
# 재부팅 필요 여부 확인
[ -f /var/run/reboot-required ] && echo "재부팅 필요" || echo "재부팅 불필요"
# 필요하면 재부팅
reboot
sudo 관리자 계정 생성
root로 서버를 운영하는 것은 관리자 비밀번호가 적힌 명찰을 달고 돌아다니는 것과 같다. 실수 한 번이면 시스템 전체가 날아간다. 일반 사용자 계정을 만들고, 필요할 때만 sudo로 관리자 권한을 빌려 쓰는 것이 안전하다.
사용자 생성
# 새 사용자 생성 (원하는 이름으로 변경)
adduser deploy
비밀번호와 기본 정보를 입력하라는 프롬프트가 나온다. 비밀번호만 입력하고 나머지는 Enter로 건너뛰면 된다.
sudo 권한 부여
# deploy 사용자를 sudo 그룹에 추가
usermod -aG sudo deploy
권한 확인
새 사용자로 전환해서 sudo가 작동하는지 테스트한다.
# deploy 사용자로 전환
su - deploy
# sudo 테스트
sudo whoami
# 출력: root ← 성공
root가 출력되면 sudo 권한이 정상적으로 부여된 것이다.
SSH 키 인증 설정 방법
비밀번호는 무차별 대입(brute-force) 공격에 취약하다. SSH 키 인증은 수학적으로 복제 불가능한 열쇠 쌍을 사용하므로 비밀번호보다 압도적으로 안전하다.
동작 원리
| 구성 요소 | 비유 | 저장 위치 |
|---|---|---|
| 개인 키 (Private Key) | 내 금고 열쇠 — 절대 남에게 주지 않음 | 내 로컬 PC (~/.ssh/id_ed25519) |
| 공개 키 (Public Key) | 금고 자물쇠 — 서버에 걸어둠 | 서버 (~/.ssh/authorized_keys) |
접속할 때 서버는 "이 자물쇠에 맞는 열쇠를 갖고 있는가?"를 수학적으로 검증한다. 비밀번호처럼 네트워크를 통해 전송되지 않으므로 가로채기도 불가능하다.
1단계 — 로컬 PC에서 SSH 키 생성
내 PC(로컬)에서 실행한다. 서버가 아니다.
ssh-keygen -t ed25519 -C "deploy@myserver"
| 옵션 | 설명 |
|---|---|
-t ed25519 | 최신 알고리즘. RSA보다 짧고 빠르고 안전함 |
-C "..." | 키에 붙이는 메모 (식별용) |
비밀번호(passphrase)를 묻는 화면이 나오면 입력하는 것을 권장한다. 키 파일이 유출되더라도 passphrase 없이는 사용할 수 없기 때문이다.
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519): [Enter]
Enter passphrase (empty for no passphrase): [비밀번호 입력]
Enter same passphrase again: [비밀번호 재입력]
2단계 — 공개 키를 서버에 복사
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@서버_IP
비밀번호를 입력하면 공개 키가 서버의 ~/.ssh/authorized_keys에 자동으로 추가된다.
⚠️ Windows에서
ssh-copy-id가 없는 경우:powershell type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh deploy@서버_IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
3단계 — SSH 키로 접속 테스트
ssh deploy@서버_IP
비밀번호 대신 passphrase를 묻거나 (passphrase를 설정한 경우), 아무것도 묻지 않고 바로 접속되면 성공이다.
🔴 매우 중요: 다음 단계(비밀번호 인증 비활성화)로 넘어가기 전에 반드시 새 터미널을 열어 키 인증으로 접속이 되는지 확인하라. 이 확인 없이 비밀번호를 끄면 서버에서 영원히 잠긴다.
비밀번호 인증 비활성화
SSH 키로 접속이 확인됐으니, 이제 비밀번호 로그인을 끈다. SSH 설정 파일을 수정한다.
sudo nano /etc/ssh/sshd_config
아래 항목을 찾아서 수정한다. 주석(#)이 달려 있으면 주석을 제거하고 값을 변경한다.
# 비밀번호 인증 끄기
PasswordAuthentication no
# 빈 비밀번호 차단 (이미 기본값이지만 명시)
PermitEmptyPasswords no
# 키보드 인터랙티브 인증 끄기 (비밀번호 우회 방지)
KbdInteractiveAuthentication no
설정을 저장하고 SSH 서비스를 재시작한다.
sudo systemctl restart sshd
💡 확인: 재시작 후 현재 접속은 끊지 말고, 새 터미널에서 비밀번호로 접속을 시도해보라.
Permission denied (publickey)오류가 나오면 정상이다.
root 로그인 차단
마지막으로 root 계정의 SSH 직접 접속을 차단한다.
sudo nano /etc/ssh/sshd_config
# root 직접 로그인 차단
PermitRootLogin no
sudo systemctl restart sshd
이제 root로는 SSH 접속 자체가 불가능하다. 관리자 작업이 필요하면 deploy 계정으로 접속한 뒤 sudo를 사용한다.
최종 확인 체크리스트
| 테스트 | 예상 결과 |
|---|---|
ssh deploy@서버_IP | ✅ SSH 키로 접속 성공 |
ssh root@서버_IP | ❌ Permission denied |
ssh -o PubkeyAuthentication=no deploy@서버_IP | ❌ Permission denied (비밀번호 차단 확인) |
세 가지 모두 통과하면 1편의 보안 설정이 완료된 것이다. 🔒
📝 정리
- [x] 첫 접속 후 즉시
apt update && apt upgrade실행 - [x] sudo 사용자 생성 — root 직접 사용 대신
deploy계정 + sudo 권한 - [x] SSH 키 인증 전환 — ed25519 키 생성 →
ssh-copy-id로 서버에 등록 → 키 접속 확인 - [x] 비밀번호 인증 비활성화 —
PasswordAuthentication no설정 - [x] root 로그인 차단 —
PermitRootLogin no설정 - [x] 순서 필수 — 문 잠그기(계정) → 열쇠 만들기(SSH 키) → 기존 열쇠 폐기(비밀번호 끄기)
다음 편 예고
2편: SSH 포트 변경, UFW 방화벽, fail2ban
비밀번호를 끈 것만으로는 부족하다. 기본 22번 포트를 바꾸고, UFW 방화벽으로 필요한 포트만 열고, fail2ban으로 반복 실패 IP를 자동 차단하는 방법을 다룬다.