SSH 키 관리 및 보안 완벽 가이드
SSH(Secure Shell)는 Linux 서버를 관리하기 위한 표준 프로토콜입니다. 비밀번호를 사용할 수도 있지만, SSH 키는 훨씬 더 안전하고 편리한 대안을 제공합니다. 하지만 생성부터 교체(rotation)까지 이러한 키를 올바르게 관리하는 것은 강력한 보안 상태를 유지하는 데 매우 중요합니다.
이 가이드에서는 기본 생성부터 고급 관리 전략까지 SSH 키에 대해 알아야 할 모든 것을 다룹니다.
1. 안전한 키 생성
SSH 보안의 첫 번째 단계는 올바른 알고리즘을 선택하고 강력한 키 쌍을 생성하는 것입니다.
온라인 SSH 키 생성기
온라인 SSH 키 생성기는 테스트나 키 쌍을 빠르게 만드는 데 편리하지만, 운영 환경용 키에는 웹 기반 도구를 절대로 사용해서는 안 됩니다. 개인 키가 네트워크를 통해 전송되지 않도록 항상 로컬 머신에서 생성하세요.
ssh-keygen 명령 빌더
키를 생성하는 표준 도구는 ssh-keygen입니다. ssh-keygen 명령 빌더를 사용하면 최적의 파라미터를 선택할 수 있습니다. 오늘날에는 오래된 RSA보다 Ed25519를 사용하는 것이 권장됩니다.
현대적이고 안전한 키를 위한 추천 명령:
ssh-keygen -t ed25519 -C "[email protected]"
이전 시스템과의 호환성을 위해 RSA를 사용해야 한다면 최소 4096비트인지 확인하세요.
ssh-keygen -t rsa -b 4096
2. 액세스 관리: authorized_keys 형식
일반적으로 ~/.ssh/에 위치한 authorized_keys 파일은 특정 사용자로 로그인할 수 있는 공개 키를 결정합니다.
authorized_keys 형식
authorized_keys 형식의 단일 항목은 세 부분으로 구성됩니다.
- 옵션 (선택 사항): 키의 기능을 제한합니다 (예:
from="1.2.3.4",no-agent-forwarding). - 키 유형: 알고리즘 (예:
ssh-ed25519또는ssh-rsa). - 공개 키 데이터: 실제 base64로 인코딩된 키.
- 주석 (선택 사항): 키를 식별하기 위한 레이블 (보통 이메일이나 호스트 이름).
제한 사항이 포함된 예시:
from="192.168.1.0/24" ssh-ed25519 AAAAC3Nza... [email protected]
3. 서버 검증: known_hosts 형식
authorized_keys가 클라이언트 인증용이라면, known_hosts 파일은 서버 인증용입니다. 이는 중간자(MITM) 공격으로부터 사용자를 보호합니다.
known_hosts 형식
known_hosts 형식은 서버의 호스트 이름 또는 IP 주소를 해당 공개 호스트 키에 매핑합니다.
서버에 처음 연결할 때 SSH는 호스트의 지문을 확인하도록 요청합니다. 수락하면 키가 ~/.ssh/known_hosts에 추가됩니다. 서버의 키가 변경되면 SSH는 경고를 표시하고 연결을 차단합니다.
항목 형식:
[hostname],[IP] ssh-ed25519 AAAAC3Nza...
4. SSH 보안을 위한 베스트 프랙티스
- 암호(Passphrase) 사용: 항상 강력한 암호로 개인 키를 보호하세요. 키를 도난당하더라도 암호 없이는 무용지물입니다.
- 비밀번호 인증 비활성화: SSH 키가 작동하면
/etc/ssh/sshd_config에서PasswordAuthentication no를 설정하여 비밀번호 로그인을 비활성화하세요. - 정기적인 키 교체: 비밀번호와 마찬가지로 SSH 키도 정기적으로 변경해야 합니다. 특히 직원이 퇴사할 때 중요합니다.
- SSH 에이전트 사용:
ssh-agent를 사용하여 복호화된 키를 메모리에 저장하면 매번 암호를 입력할 필요 없이 연결할 수 있습니다. - 점프 서버(Bastion Host) 구현: 모든 서버를 공용 인터넷에 노출하는 대신, 단일화된 보안 입구를 사용하세요.
5. 요약
SSH 키 생성기를 마스터하고 authorized_keys 및 known_hosts 형식을 이해함으로써 인프라에 대한 무단 액세스 위험을 크게 줄일 수 있습니다. 비밀번호에서 키 기반 인증으로 전환하는 것은 모든 Linux 기반 환경을 보호하는 데 있어 가장 중요한 단계입니다.