SSH 키 기반 인증은 기존의 사용자 이름과 비밀번호 방식보다 훨씬 강력하고 안전한 원격 서버 접속 방법을 제공합니다. 이 방식은 암호화된 한 쌍의 키, 즉 공개 키(Public Key)와 개인 키(Private Key)를 사용하여 사용자를 인증합니다. 서버에는 공개 키를 저장하고, 클라이언트(사용자)는 개인 키를 안전하게 보관하여 접속 시 인증에 사용합니다.
1. SSH 키 쌍 생성
먼저 SSH 접속을 위한 공개/개인 키 쌍을 생성합니다. 여기서는 ssh-keygen 명령어를 사용하여 RSA 알고리즘 기반의 키를 생성합니다. 일반적으로 서버에서 키를 생성한 후, 공개 키를 authorized_keys 파일에 추가하고 개인 키는 클라이언트에 보관합니다.
# OpenSSH 서비스 설치 여부 확인 (CentOS 7에는 기본 설치되어 있을 가능성이 높습니다)
rpm -qa | grep openssh
# RSA 키 쌍 생성 (더 높은 보안을 위해 4096 비트 사용 권장)
ssh-keygen -t rsa -b 4096
위 명령을 실행하면 다음과 같은 프롬프트가 나타납니다. 각 단계에 따라 진행합니다:
Generating public/private rsa key pair.
# 키 파일을 저장할 경로를 지정합니다. 기본 경로인 '/root/.ssh/id_rsa'를 그대로 사용하려면 Enter를 누릅니다.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
# 개인 키에 대한 암호(passphrase)를 입력합니다. 보안 강화를 위해 설정하는 것이 좋지만,
# 자동화된 스크립트 등에서는 비워둘 수도 있습니다 (Enter를 두 번 누르면 암호 없이 생성).
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx root@localhost.localdomain
The key's randomart image is:
+---[RSA 4096]----+
| . . |
| = + |
| . B o |
| . * = . |
| . S o + |
| . + B |
| . o O o . |
| . + E = + |
| o . o . . |
+----[SHA256]-----+
키 생성이 완료되면 ~/.ssh/ 디렉터리 아래에 두 개의 파일이 생성됩니다:
id_rsa: 개인 키 파일 (절대 외부에 노출되어서는 안 됩니다.)id_rsa.pub: 공개 키 파일 (서버에 등록할 키입니다.)
[root@localhost ~]# ls -l ~/.ssh/
total 8
-rw-------. 1 root root 3389 May 20 10:00 id_rsa
-rw-r--r--. 1 root root 746 May 20 10:00 id_rsa.pub
2. 서버 SSH 서비스 설정
생성된 공개 키를 서버의 authorized_keys 파일에 추가하고, SSH 서비스 설정을 변경하여 키 기반 인증을 활성화합니다. 여기서는 root 사용자를 기준으로 설명합니다.
2.1. 공개 키 등록
생성된 공개 키(id_rsa.pub) 내용을 authorized_keys 파일에 추가합니다. 이 파일은 SSH 클라이언트가 제공하는 공개 키를 인증하는 데 사용됩니다.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
2.2. 파일 및 디렉터리 권한 설정
SSH 키 기반 인증이 올바르게 작동하려면 .ssh 디렉터리와 authorized_keys 파일의 권한이 매우 중요합니다. 너무 개방적인 권한은 보안 취약점으로 이어질 수 있습니다.
# .ssh 디렉터리는 소유자만 모든 권한을 갖도록 설정 (읽기, 쓰기, 실행)
chmod 700 ~/.ssh/
# authorized_keys 파일은 소유자만 읽기/쓰기 권한을 갖도록 설정
chmod 600 ~/.ssh/authorized_keys
2.3. SSHD 데몬 설정 변경
/etc/ssh/sshd_config 파일을 수정하여 키 기반 인증을 허용하고, 필요한 경우 비밀번호 인증을 비활성화합니다.
# SSHD 설정 파일 열기
vim /etc/ssh/sshd_config
다음 설정을 찾아서 값을 변경하거나, 주석 처리된 부분을 해제하고 값을 설정합니다:
PubkeyAuthentication yes: 공개 키 인증을 활성화합니다.AuthorizedKeysFile .ssh/authorized_keys: 공개 키 파일의 경로를 지정합니다.PasswordAuthentication no: 비밀번호 인증을 비활성화하여 보안을 강화합니다.ChallengeResponseAuthentication no: 대화식 인증도 비활성화합니다.RSAAuthentication yes: (구버전 호환용으로 명시하는 경우가 있습니다.PubkeyAuthentication에 포함되기도 합니다.)
# 수정할 부분 예시
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
ChallengeResponseAuthentication no
2.4. SSH 서비스 재시작
설정 변경을 적용하려면 SSH 서비스를 재시작해야 합니다.
systemctl restart sshd.service
3. 클라이언트에서 SSH 접속 설정
서버에 등록한 공개 키에 상응하는 개인 키(id_rsa)를 클라이언트 시스템으로 안전하게 가져와야 합니다. 이 개인 키는 절대 외부에 유출되지 않도록 주의해야 합니다.
3.1. 개인 키 가져오기
서버의 ~/.ssh/id_rsa 파일을 클라이언트로 복사합니다. scp 명령어를 사용하는 것이 가장 일반적이고 안전한 방법입니다.
# 클라이언트에서 실행 (개인 키를 'ssh_keys' 디렉터리에 저장하는 예시)
scp root@your_server_ip:~/.ssh/id_rsa ~/ssh_keys/server_id_rsa
이후 클라이언트에서 이 개인 키 파일의 권한을 400 또는 600으로 설정하여 다른 사용자가 접근하지 못하도록 합니다.
chmod 600 ~/ssh_keys/server_id_rsa
3.2. SSH 클라이언트 설정
이제 클라이언트에서 가져온 개인 키를 사용하여 서버에 접속할 수 있습니다.
명령줄 SSH 클라이언트
터미널에서 -i 옵션을 사용하여 개인 키 파일을 지정합니다.
ssh -i ~/ssh_keys/server_id_rsa root@your_server_ip
만약 개인 키 생성 시 암호(passphrase)를 설정했다면, 접속 시 해당 암호를 입력해야 합니다.
Xshell 등 GUI 클라이언트
Xshell 같은 GUI SSH 클라이언트에서는 다음과 같이 설정할 수 있습니다:
- 세션 등록 또는 편집 시, '인증(Authentication)' 또는 '사용자 인증(User Authentication)' 섹션으로 이동합니다.
- '방법(Method)' 또는 '인증 방식'에서 'Public Key'를 선택합니다.
- '사용자 키(User Key)' 항목에서 '찾아보기(Browse)'를 클릭하여 클라이언트로 가져온 개인 키 파일(예:
server_id_rsa)을 선택합니다. - 개인 키 생성 시 설정했던 '암호(Passphrase)'가 있다면 해당 필드에 입력합니다.
- 사용자 이름(User name)은 'root'로 설정합니다.
설정이 완료되면 저장하고 접속을 시도하여 키 기반 인증으로 서버에 성공적으로 로그인되는지 확인합니다. 이제 더욱 안전하게 CentOS 7 서버에 접속할 수 있습니다.