
5분 만에 SSH 키 인증 (SSH Key Authentication) 설정하는 방법
요약
SSH 키 인증을 사용하여 비밀번호 없이 안전하게 서버에 접속하는 방법을 설명하는 가이드입니다. Ed25519 알고리즘을 활용한 키 쌍 생성부터 Mac, Windows, Linux 환경에서의 설정법을 다룹니다.
핵심 포인트
- 비밀번호 기반 인증의 보안 취약점(무차별 대입 공격 등) 해결
- Ed25519 알고리즘 사용 권장 (RSA보다 빠르고 안전함)
- 개인키는 로컬에 보관하고 공개키만 서버에 등록
- Mac, Windows, Linux 환경을 모두 지원하는 명령어 제공
SSH 키 인증 (SSH key authentication)은 비밀번호를 한 쌍의 키 파일—하나의 개인키 (private key)와 하나의 공개키 (public key)—로 대체합니다. 서버는 아무것도 입력하거나 네트워크를 통해 전송하지 않고도 귀하의 신원을 확인합니다. 설정에는 약 5분이 소요됩니다. 일단 작동하기 시작하면, 다시는 비밀번호 방식으로 돌아가고 싶지 않을 것입니다.
여러 대의 서버를 관리한다면 비밀번호 기반의 SSH는 정말 큰 문제입니다. 어떤 비밀번호가 어디에 쓰이는지 잊어버리게 됩니다. 누군가 자격 증명 (credential)을 변경하고 귀하에게 알리는 것을 잊을 수도 있습니다. 비밀번호 하나만 유출되어도 공격자는 귀하와 동일한 권한을 갖게 됩니다. 키 기반 인증 (Key-based auth)은 이 모든 문제를 제거합니다.
저는 AWS, DigitalOcean, 그리고 베어메탈 (bare-metal) 환경에 걸쳐 40대 이상의 서버에 키 인증을 설정해 왔습니다. 이 가이드는 Mac, Windows, Linux를 위한 정확한 명령어를 처음부터 끝까지 다룹니다.
SSH 키 인증이 실제로 하는 일
SSH 키는 한 쌍으로 작동합니다: 개인키 (private key) (귀하의 기기에 머물며 절대 공유되지 않음)와 공개키 (public key) (접속하려는 모든 서버에 저장됨)입니다.
연결할 때, 귀하의 기기는 개인키를 네트워크를 통해 전송하지 않고도 해당 키를 보유하고 있음을 증명합니다. 서버는 권한이 있는 공개키 목록을 확인하여 일치하는 항목을 찾아 접속을 허용합니다.
네트워크를 통해 비밀번호가 전송되지 않습니다. 서버가 더 이상 비밀번호 인증을 수락하지 않기 때문에 비밀번호 기반의 무차별 대입 공격 (brute-force attacks)이 무력해집니다. 자격 증명이 담긴 Google Doc을 공유할 필요도 없습니다.
중요한 이유: 2024 Verizon 데이터 유출 조사 보고서 (Data Breach Investigations Report)에 따르면, 자격 증명 탈취 및 남용은 공격자가 시스템에 무단으로 접근하는 가장 흔한 방법 중 하나로 남아 있습니다. SSH 키 인증은 SSH 로그인 중에 비밀번호의 필요성을 제거하여, 귀하의 SSH 서비스에 대한 비밀번호 기반 공격을 무력화합니다.
1단계: 이미 키가 있는지 확인하기
새 키를 생성하기 전에, ~/.ssh/ 디렉토리에 이미 한 쌍의 키가 있는지 확인하십시오.
Mac / Linux:
ls -la ~/.ssh/
Windows (PowerShell):
Get-ChildItem $env:USERPROFILE\.ssh\
id_ed25519 및 id_ed25519.pub (또는 id_rsa / id_rsa.pub)와 같은 파일을 찾으시면 됩니다.
파일이 존재한다면 3단계로 건너뛰세요. 존재하지 않는다면 계속 진행하세요.
2단계: 새로운 키 쌍 (Key Pair) 생성하기
Ed25519를 사용하세요. RSA보다 더 빠르고, 짧으며, 더 안전합니다. 거의 모든 현대적인 서버가 이를 지원합니다.
ssh-keygen -t ed25519 -C "your-email@example.com"
세 가지 프롬프트(prompt)가 나타납니다:
- 파일 위치 (File location) - Enter를 눌러 기본값(
~/.ssh/id_ed25519)을 수락합니다. - 패스프레이즈 (Passphrase) - 추가적인 보안을 위해 입력하거나, 건너뛰려면 Enter를 누릅니다.
- 패스프레이즈 확인 (Confirm passphrase) - 한 번 더 입력하거나 다시 Enter를 누릅니다.
끝났습니다. 두 개의 파일이 생성됩니다:
| 파일 | 설명 | 공유 여부 |
|---|---|---|
id_ed25519 | 개인 키 (Private key) | 절대 안 됨. 이 파일은 본인의 머신에 머물러야 합니다. |
id_ed25519.pub | 공개 키 (Public key) | 예. 이 파일은 서버에 업로드합니다. |
⚠️
-C플래그는 공개 키 내부에 주석(보통 이메일)을 추가합니다. 하나의 서버에 여러 머신의 키가 있는 경우, 이 주석은 키들을 구분할 수 있는 유일한 방법입니다. 이 단계를 건너뛰지 마세요.
내 서버가 RSA만 지원한다면?
일부 오래된 시스템(CentOS 6, 레거시 어플라이언스 등)은 Ed25519를 인식하지 못합니다. 이 경우 대체 수단으로 RSA 4096을 사용하세요:
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
프롬프트와 과정은 동일합니다. 단지 키의 길이가 더 길어질 뿐입니다.
3단계: 서버로 공개 키 복사하기
이 단계는 대부분의 튜토리얼이 복잡하게 설명하는 부분입니다. 하지만 복잡할 필요가 없습니다.
방법 1: ssh-copy-id (가장 빠름)
현재 비밀번호로 로그인이 가능하다면, 이 명령어 하나로 모든 것이 해결됩니다:
ssh-copy-id username@your-server-ip
이 명령어는 공개 키를 복사하고, 필요한 경우 ~/.ssh/authorized_keys 파일을 생성하며, 올바른 권한(permissions)을 설정합니다. 완료되었습니다.
Windows 사용자: ssh-copy-id는 PowerShell에서 기본적으로 사용할 수 없습니다. 방법 2를 사용하거나 Git Bash를 설치하세요.
방법 2: 수동 복사 (어디서나 작동함)
먼저, 공개 키를 클립보드에 복사합니다:
# Mac
cat ~/.ssh/id_ed25519.pub | pbcopy
...
그 다음, 비밀번호를 사용하여 (마지막으로 한 번 더) 서버에 SSH 접속을 한 뒤 다음을 실행하세요:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "PASTE_YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys
...
PASTE_YOUR_PUBLIC_KEY_HERE를 복사한 실제 키로 교체하세요.
방법 3: 클라우드 제공업체 대시보드 (Cloud Provider Dashboard)
AWS, DigitalOcean 또는 Hetzner에서는 새 서버를 생성하기 전에 대시보드에 공개 키 (Public Key)를 붙여넣을 수 있습니다. 제공업체는 프로비저닝 (Provisioning) 중에 이를 authorized_keys에 주입합니다.
이는 새 서버를 위한 가장 깔끔한 방법이지만, 생성 시점에만 작동합니다.
단계 4: 연결 테스트
ssh username@your-server-ip
모든 것이 제대로 작동했다면 접속에 성공한 것입니다. 비밀번호 입력창이 뜨지 않습니다. 첫 연결 이후에는 바로 셸 (Shell)로 연결됩니다.
여전히 비밀번호 입력창이 나타난다면, 다음의 일반적인 문제들을 확인하세요:
| 문제 | 해결 방법 |
|---|---|
authorized_keys의 권한(Permissions) 오류 | chmod 600 ~/.ssh/authorized_keys |
| ... |
단계 5: 비밀번호 로그인 비활성화 (선택 사항이지만 권장됨)
키 인증 (Key Authentication)이 작동하면, 비밀번호 로그인을 완전히 끌 수 있습니다. 이는 모든 무차별 대입 공격 (Brute-force attack) 시도를 입구에서 차단합니다.
sudo nano /etc/ssh/sshd_config
다음 라인들을 찾아 변경하세요:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
...
SSH 서비스를 재시작하세요:
Ubuntu/Debian
sudo systemctl restart ssh
RHEL/CentOS/Rocky Linux/AlmaLinux
sudo systemctl restart sshd
⚠️ 주의 사항: 이 작업을 수행하기 전에, 별도의 터미널 세션에서 키 로그인이 정상적으로 작동하는지 반드시 확인하세요. 비밀번호를 통한 대체 수단 없이 접속이 차단될 경우, 복구를 위해 클라우드 제공업체의 콘솔 (Console) 접속 권한이 필요할 수 있습니다.
여러 서버에 걸친 키 관리
관리해야 할 서버가 5~10대 이상으로 늘어나면, 키 인증은 새로운 문제를 야기합니다: 어떤 키가 어디에 권한을 가지고 있는지 추적하는 것, 누군가 퇴사했을 때 액세스 권한을 취소하는 것, 그리고 정기적으로 키를 교체 (Rotation)하는 작업 등입니다.
그 정도 규모라면 저는 CtrlOps를 사용합니다. 여기에는 서버의 모든 승인된 키를 볼 수 있는 시각적 SSH 키 레지스트리 (SSH key registry)가 있어, 키를 서버 간에 복사하거나 클릭 한 번으로 액세스 권한을 취소할 수 있습니다. 내장된 SSH 설정 마법사 (SSH Setup Wizard)는 처음부터 시작하는 경우 키 생성 (Key generation) 및 서버 설정을 단계별로 안내합니다. 체험해보고 싶다면 한 달간 무료로 사용할 수 있습니다.
하지만 1~3대의 서버라면 위에서 설명한 수동 프로세스만으로도 충분합니다.
빠른 참조 (Quick Reference)
전체 설정 과정을 한눈에 확인하세요:
# 1. 키 생성 (Generate key)
ssh-keygen -t ed25519 -C "your-email@example.com"
...
몇 가지 명령어와 약 5분 정도의 시간만 투자하면, 다시는 서버 비밀번호를 입력할 필요가 없을 것입니다.
이 내용이 시간을 절약해 주었다면 댓글을 남겨주세요. 서버 관리 심층 분석 (Server management deep-dives) 글을 더 쓰는 것은 언제나 환영입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기