서버에 접속할 때마다 비밀번호를 입력하는 것은 불편할 뿐 아니라 보안에도 취약합니다. 비밀번호는 브루트 포스 공격으로 뚫릴 수 있지만, SSH 키는 사실상 뚫는 것이 불가능합니다. 이 글에서 SSH 키 생성부터 서버 등록, 편리한 config 설정까지 한 번에 설명합니다.
SSH 키 인증이란?
SSH 키 인증은 공개키 암호화 방식으로 작동합니다.
| 키 | 위치 | 역할 | 비유 |
|---|---|---|---|
| 비밀키 (Private Key) | 내 컴퓨터 | 서명(인증) 생성 | 열쇠 🔑 |
| 공개키 (Public Key) | 접속할 서버 | 서명 검증 | 자물쇠 🔒 |
비밀키로 만든 서명을 공개키로 검증하는 방식이므로, 비밀키가 유출되지 않는 한 100% 안전합니다.
비밀번호 vs SSH 키 비교
| 비밀번호 인증 | SSH 키 인증 | |
|---|---|---|
| 보안 | 브루트 포스 공격 가능 | 사실상 해킹 불가 (4096비트 RSA 기준) |
| 편의성 | 매번 입력 | 자동 인증 (패스프레이즈 설정 시 1회만) |
| 자동화 | 스크립트에 비밀번호 하드코딩 위험 | 안전하게 자동화 가능 |
| 여러 서버 | 각각 비밀번호 기억 필요 | 하나의 키로 여러 서버 접속 |
Step 1: SSH 키 생성 (내 컴퓨터에서)
Mac/Linux 터미널
# Ed25519 알고리즘 추천 (더 빠르고 안전)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 질문이 나오면:
# 1. 저장 경로: 엔터 (기본 ~/.ssh/id_ed25519)
# 2. 패스프레이즈: 엔터 (없이 하려면) 또는 비밀번호 입력 (더 안전)
# 3. 패스프레이즈 확인: 엔터
Windows (PowerShell 또는 Git Bash)
# Windows 10/11에는 OpenSSH가 기본 내장
ssh-keygen -t ed25519 -C "your_email@example.com"
# 저장 경로: C:Users사용자명.sshid_ed25519
생성된 파일 확인
ls ~/.ssh/
# id_ed25519 ← 비밀키 (절대 외부에 공유 금지!)
# id_ed25519.pub ← 공개키 (서버에 등록할 것)
# 공개키 내용 확인
cat ~/.ssh/id_ed25519.pub
# 출력 예: ssh-ed25519 AAAAC3Nza... your_email@example.com
Step 2: 서버에 공개키 등록
방법 A: ssh-copy-id (가장 간편, Mac/Linux)
# 서버 IP와 사용자명 입력
ssh-copy-id user@서버IP주소
# 서버 비밀번호 입력 (마지막으로 비밀번호 사용)
# "Number of key(s) added: 1" 메시지가 나오면 성공!
방법 B: 수동 등록 (Windows 또는 ssh-copy-id가 없을 때)
# 1. 공개키 내용 복사
cat ~/.ssh/id_ed25519.pub
# 출력된 내용 전체를 복사
# 2. 서버에 비밀번호로 접속
ssh user@서버IP주소
# 3. authorized_keys 파일에 추가
mkdir -p ~/.ssh
echo "복사한_공개키_내용" >> ~/.ssh/authorized_keys
# 4. 권한 설정 (필수! 권한이 잘못되면 작동 안 함)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 5. 로그아웃
exit
Step 3: 접속 테스트
# 비밀번호 없이 바로 접속되면 성공!
ssh user@서버IP주소
# 만약 여전히 비밀번호를 물어보면:
# - 서버의 ~/.ssh/authorized_keys 권한 확인 (chmod 600)
# - 서버의 ~/.ssh 디렉토리 권한 확인 (chmod 700)
# - 서버의 /etc/ssh/sshd_config에서 PubkeyAuthentication yes 확인
Step 4: SSH Config로 편하게 접속하기
~/.ssh/config 파일에 서버 별명을 등록하면 긴 명령어 대신 짧은 이름으로 접속할 수 있습니다.
# ~/.ssh/config 파일 생성/편집
nano ~/.ssh/config
# 내용 추가:
Host myserver
HostName 123.456.78.90
User wpadmin
IdentityFile ~/.ssh/id_ed25519
Port 22
Host devserver
HostName 98.76.54.32
User root
IdentityFile ~/.ssh/id_ed25519
Port 2222
이제 다음과 같이 간단하게 접속합니다:
# 이전: ssh -i ~/.ssh/id_ed25519 -p 22 wpadmin@123.456.78.90
# 이후:
ssh myserver # 끝!
추가 보안: 비밀번호 인증 완전 차단
SSH 키가 잘 작동하면, 비밀번호 인증을 완전히 끄는 것이 가장 안전합니다.
# 서버에서 실행
sudo nano /etc/ssh/sshd_config
# 다음 줄을 찾아서 변경:
PasswordAuthentication no
ChallengeResponseAuthentication no
# SSH 서비스 재시작
sudo systemctl restart sshd
# ⚠️ 주의: SSH 키로 접속이 확인된 후에 실행하세요!
# 비밀번호 인증을 끄면 키 없이는 접속 불가합니다.
GitHub에 SSH 키 등록
GitHub도 SSH 키로 접속하면 매번 비밀번호/토큰을 입력하지 않아도 됩니다.
- 공개키 복사:
cat ~/.ssh/id_ed25519.pub - GitHub → Settings → SSH and GPG keys → New SSH key
- 공개키 붙여넣기 → Add SSH key
- 테스트:
ssh -T git@github.com→ “Hi 유저명!” 메시지 확인
트러블슈팅
| 문제 | 원인 | 해결 |
|---|---|---|
| 여전히 비밀번호를 물어봄 | authorized_keys 권한 문제 | chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys |
| Permission denied (publickey) | 키가 등록되지 않음 | 공개키가 올바르게 등록되었는지 확인 |
| Connection refused | SSH 서비스 미실행 또는 포트 다름 | sudo systemctl status sshd 확인, 포트 확인 |
| 키를 여러 서버에 사용하고 싶음 | 같은 공개키를 여러 서버에 등록 | 공개키는 무한히 복사해서 등록 가능 |
마무리
SSH 키 설정은 한 번만 하면 평생 편리하고 안전합니다. 오늘 할 일: ① ssh-keygen으로 키 생성 ② ssh-copy-id로 서버에 등록 ③ ~/.ssh/config에 별명 등록. 10분이면 끝나고, 앞으로 서버 접속이 “ssh myserver” 한 줄로 끝납니다.