Overview
SSH 공개키 인증은 기존의 ID/PW 방식보다 보안성이 뛰어난 인증 방법이다.
이 방식에서는 공개키(Public Key)를 서버에 저장하고, 개인키(Private Key)를 클라이언트에서 사용하여 로그인한다.
AWS, GCP, Azure 등의 클라우드 환경에서 기본적으로 사용되는 인증 방식
SSH 공개키 인증의 주요 장점
비밀번호 없이 안전한 접속 (비밀번호 유출 위험 없음)
자동화된 SSH 접속 가능 (스크립트, 배치 작업 등)
SSH 보안 강화 (Brute-force 공격 방지)
이 글에서는 SSH 공개키 인증의 개념, 설정 방법, 키 생성 및 사용법을 자세히 알아본다.

SSH 공개키 인증 접속 과정
- SSH 클라이언트가 비공개키(Private Key)를 사용하여 서버에 접속 요청
- 서버는 등록된 공개키(Public Key)와 클라이언트의 키가 일치하는지 확인
- 일치하면 접속 허용, 불일치하면 거부
비밀번호 없이 안전하게 SSH 접속 가능
SSH 공개키 & 개인키 개념
키 종류 | 설명 |
공개키 (Public Key) | 서버에 저장됨 (~/.ssh/authorized_keys ) |
개인키 (Private Key) | 클라이언트에서 보관 (~/.ssh/id_rsa ) |
공개키를 서버에 등록하고, 개인키를 이용해 로그인하는 방식
서버에서 공개키 인증 설정 (Server: 172.17.5.10)
① 공개키 저장 디렉터리 생성
mkdir -p ~/.ssh
chmod 700 ~/.ssh
② SSH 설정 변경 (/etc/ssh/sshd_config)
vi /etc/ssh/sshd_config
...
# 43번째 줄 (주석 제거)
PubkeyAuthentication yes
# 64번째 줄 (주석 제거 및 값 변경)
PasswordAuthentication no
# 65번째 줄 (주석 제거)
AuthorizedKeysFile .ssh/authorized_keys
비밀번호 로그인 차단 (PasswordAuthentication no)
공개키 인증 활성화 (PubkeyAuthentication yes)
③ SSH 서비스 재시작
systemctl restart sshd
클라이언트에서 키 생성 (Client: 172.17.5.30)
① SSH 키 생성
ssh-keygen -t rsa -b 4096 -C "somaz@client"
생성된 파일 경로 (~/.ssh/)
- 개인키:
~/.ssh/id_rsa
- 공개키:
~/.ssh/id_rsa.pub
② 공개키 서버로 전송
ssh-copy-id -i ~/.ssh/id_rsa.pub somaz@172.17.5.10
자동으로 ~/.ssh/authorized_keys에 추가됨
수동으로 복사할 경우
cat ~/.ssh/id_rsa.pub | ssh somaz@172.17.5.10 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
SSH 공개키 인증 접속 테스트
ssh somaz@172.17.5.10
비밀번호 없이 SSH 로그인 성공
PuTTY를 사용한 SSH 접속 (Windows)
PuTTY를 사용하면 Windows에서 SSH 공개키 인증을 사용할 수 있음
① PuttyGen으로 키 생성
- PuttyGen 실행 → Generate 버튼 클릭
- 마우스를 움직이며 키 생성
- "Save private key" 버튼 클릭 (id_rsa.ppk 저장)
- "Public key for pasting into OpenSSH" 내용 복사
- 서버 (
~/.ssh/authorized_keys
) 에 붙여넣기
② 공개키 저장 및 권한 변경
echo "공개키 내용" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
파일 권한 설정 (보안 강화)
chown somaz:somaz ~/.ssh/authorized_keys chmod 700 ~/.ssh
③ PuTTY에서 SSH 접속
- PuTTY 실행
- Host Name에 서버 IP 입력 (172.17.5.10)
- Connection → SSH → Auth에서 개인키 (
id_rsa.ppk
) 선택 - Open 클릭하여 접속 → 계정(somaz) 입력
- 비밀번호 없이 SSH 로그인 성공
SSH 포트 변경 (보안 강화)
- 기본 포트 22번은 스캐닝 대상이 되기 쉬우므로 다른 포트로 변경하는 것이 좋다.
# /etc/ssh/sshd_config 수정
Port 2222
- 변경 후 방화벽 설정도 함께 고려 필요하다.
- brute-force 공격 감소에 효과적이다.
brute-force 공격이란?
브루트 포스 공격은 가능한 모든 비밀번호 조합을 하나씩 대입해보며 로그인 등 인증 정보를 무작정 맞추는 방식이다.
- 사용자 ID: admin
- 비밀번호 후보: 1234, 123456, password, admin1, ...
→ 공격자는 자동화된 프로그램을 이용해 이런 수천, 수만 개의 조합을 빠르게 입력해보며 접속 시도
권장 키 타입: Ed25519
- rsa도 좋지만, ed25519는 더 짧고 빠르며 보안성이 우수한 최신 키 타입이다.
ssh-keygen -t ed25519 -C "your_email@example.com"
- 특히 2023년 이후엔 많은 보안 커뮤니티에서
rsa
보다ed25519
를 권장한다.
Fail2Ban 설치 및 설정 (SSH 접근 차단 자동화)
# Ubuntu/Debian
sudo apt install fail2ban
# RHEL/CentOS
sudo yum install fail2ban
- SSH 로그인 시도 실패 횟수 초과 시 자동 차단 → brute-force 방지에 탁월
공개키 fingerprint 확인
- 서버와 클라이언트가 사용하는 키가 일치하는지 확인할 수 있다.
ssh-keygen -lf ~/.ssh/id_rsa.pub
마무리
SSH 공개키 인증은 비밀번호 없이 안전하게 SSH 접속할 수 있는 방법이다.
클라우드 서버(AWS, GCP, Azure)에서도 보안 강화를 위해 기본적으로 공개키 인증을 사용한다.
공개키 인증은 강력한 SSH 보안의 시작점이다.
방화벽, 포트 변경, Fail2Ban, IP 제한 등을 병행하면 안전하고 철벽 같은 리눅스 서버 접근 제어가 가능하다.
정리
- 공개키 (~/.ssh/authorized_keys)는 서버에 저장
- 개인키 (~/.ssh/id_rsa)는 클라이언트에 보관
- PuTTY 사용 시 .ppk 형식의 키 파일 사용
- 설정 변경 후 systemctl restart sshd 실행 필수
이제 SSH 공개키 인증을 활용하여 안전한 원격 접속 환경을 구축해보자!
Reference
- man ssh, man sshd_config
- OpenSSH 공식 문서
'Networking, Security, Protocols' 카테고리의 다른 글
Mail Server (0) | 2022.02.17 |
---|---|
Apache HTTP + HTTPS 설정 및 SSL 적용 (0) | 2022.02.11 |
DNS(Domain Name System) (0) | 2022.01.19 |
NFS(Network File System) / auto fs(auto file system) (0) | 2022.01.18 |
FTP란? FTP Server란? (0) | 2022.01.18 |