SSH 키 설정 완벽 가이드 – 비밀번호 없이 안전하게 서버 접속하기

서버에 접속할 때마다 비밀번호를 입력하는 것은 불편할 뿐 아니라 보안에도 취약합니다. 비밀번호는 브루트 포스 공격으로 뚫릴 수 있지만, 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 키로 접속하면 매번 비밀번호/토큰을 입력하지 않아도 됩니다.

  1. 공개키 복사: cat ~/.ssh/id_ed25519.pub
  2. GitHub → Settings → SSH and GPG keys → New SSH key
  3. 공개키 붙여넣기 → Add SSH key
  4. 테스트: ssh -T git@github.com → “Hi 유저명!” 메시지 확인

트러블슈팅

문제원인해결
여전히 비밀번호를 물어봄authorized_keys 권한 문제chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
Permission denied (publickey)키가 등록되지 않음공개키가 올바르게 등록되었는지 확인
Connection refusedSSH 서비스 미실행 또는 포트 다름sudo systemctl status sshd 확인, 포트 확인
키를 여러 서버에 사용하고 싶음같은 공개키를 여러 서버에 등록공개키는 무한히 복사해서 등록 가능

마무리

SSH 키 설정은 한 번만 하면 평생 편리하고 안전합니다. 오늘 할 일: ① ssh-keygen으로 키 생성 ② ssh-copy-id로 서버에 등록 ③ ~/.ssh/config에 별명 등록. 10분이면 끝나고, 앞으로 서버 접속이 “ssh myserver” 한 줄로 끝납니다.

댓글 남기기