서버에 접속할 때마다 비밀번호를 입력하는 방식은 편리하지만, 보안에 취약할 수 있습니다. 오늘은 비밀번호 없이도 훨씬 안전하고 편리하게 서버에 접속할 수 있게 해주는 SSH Key에 대해, 그 원리부터 생성 방법까지 알아보고자 합니다.
SSH Key는 공개키 암호화 방식을 기반으로 동작하는 한 쌍의 암호화 키입니다. ‘자물쇠’ 역할을 하는 공개키(Public Key) 와, 오직 그 자물쇠만 열 수 있는 ‘열쇠’인 개인키(Private Key) 로 구성되어, 안전한 통신을 보장하는 핵심적인 보안 도구입니다.
작동 원리#
SSH Key의 작동 방식은 자물쇠와 열쇠의 비유로 쉽게 이해할 수 있습니다.
키 쌍 생성: 사용자는 먼저 자신의 컴퓨터(클라이언트)에서 개인키(열쇠) 와 공개키(자물쇠) 한 쌍을 생성합니다.
공개키(자물쇠) 등록: 접속하려는 원격 서버에 나의 공개키(자물쇠)를 미리 복사하여 등록해 둡니다. (
~/.ssh/authorized_keys
파일에 추가하는 방식)접속 시도: 내 컴퓨터에서 원격 서버로 SSH 접속을 시도합니다.
인증 과정:
서버는 접속을 시도한 사용자를 확인하기 위해, 미리 등록된 공개키(자물쇠) 로 암호화한 임의의 메시지(챌린지)를 사용자 컴퓨터로 보냅니다.
이 암호화된 메시지는 오직 쌍을 이루는 개인키(열쇠) 로만 해독할 수 있습니다.
내 컴퓨터가 개인키를 사용해 메시지를 성공적으로 해독하여 응답하면, 서버는 ‘올바른 열쇠를 가진 신뢰할 수 있는 사용자’로 판단하고 비밀번호 입력 없이 접속을 허용합니다.
이 모든 과정에서 실제 비밀번호나 개인키 자체가 네트워크를 통해 전송되지 않으므로, 중간에 통신을 가로채도 정보가 유출될 위험이 없습니다.
SSH Key를 사용하는 이유#
비밀번호 인증 방식에 비해 SSH Key는 다음과 같은 명확한 장점을 가집니다.
강력한 보안: 비밀번호는 유추가 가능하거나 무차별 대입 공격(Brute-force attack) 에 취약할 수 있습니다. 반면, SSH Key는 매우 복잡한 암호문으로 이루어져 있어 현대 컴퓨터 기술로 사실상 해독이 불가능에 가깝습니다.
높은 편의성: 키를 한 번 등록해 두면, 이후 서버에 접속할 때마다 번거롭게 비밀번호를 입력할 필요 없이 즉시 로그인할 수 있습니다.
안전한 자동화: 자동화된 배포 스크립트(CI/CD)나 백업 작업 시, 코드나 설정 파일에 민감한 비밀번호를 노출하지 않고도 안전하게 서버에 접속하여 명령을 수행할 수 있습니다.
SSH Key 생성하기#
SSH Key는 대부분의 운영체제(macOS, Linux, Windows)에 내장된 ssh-keygen
이라는 간단한 명령어로 생성할 수 있습니다.
키 생성 알고리즘 선택#
명령어 실행에 앞서, 어떤 암호화 알고리즘을 사용할지 결정하는 것이 좋습니다.
Ed25519 (가장 추천): 현재 가장 안전하고 성능이 뛰어난 방식으로 평가받습니다. 기존의 RSA 방식보다 키 길이가 짧으면서도 더 강력한 보안을 제공합니다. 대부분의 최신 시스템에서 지원합니다.
RSA: 가장 오랫동안 사용되어 호환성이 매우 뛰어납니다. Ed25519를 지원하지 않는 오래된 시스템에 접속해야 할 경우에 유용하며, 보안을 위해 키 길이는 최소 2048비트, 권장 4096비트를 사용해야 합니다.
특별한 이유가 없다면 Ed25519 알고리즘을 사용하는 것이 가장 좋은 선택입니다.
키 생성 명령어 실행#
터미널을 열고, 원하는 알고리즘에 맞춰 아래 명령어 중 하나를 실행합니다.
Ed25519 키 생성 (권장)
ssh-keygen -t ed25519 -C "your_email@example.com"
RSA 키 생성 (호환성 필요시)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t
(type):ed25519
또는rsa
와 같이 키의 암호화 알고리즘을 지정합니다.-b
(bits): RSA 키의 길이를 비트 단위로 지정합니다. (Ed25519는 불필요)-C
(comment): 키를 식별하기 위한 설명을 추가합니다. 보통 관리의 편의를 위해 이메일 주소를 사용합니다.
생성 과정 안내#
명령어를 실행하면 터미널에서 몇 가지 정보를 순서대로 입력하도록 요청합니다.
키 저장 위치 지정
> Enter file in which to save the key (/Users/your-username/.ssh/id_ed25519):
생성된 키 파일을 저장할 위치를 묻습니다. 특별한 경우가 아니라면 기본 경로 사용을 권장하므로, 그냥 Enter 키를 누르십시오. 기본 경로는 보통 사용자 홈 디렉토리 아래의 숨겨진 .ssh
폴더입니다.
비밀구문(Passphrase) 설정
> Enter passphrase (empty for no passphrase):
> Enter same passphrase again:
생성된 개인키 파일 자체를 암호화할 추가 비밀번호(비밀구문)를 설정하는 단계입니다. 만약 개인키 파일(id_ed25519)이 외부에 유출되더라도, 이 비밀구문을 모르면 키를 사용할 수 없게 만들어 보안을 한층 더 강화합니다. 비밀구문을 사용하지 않으려면 아무것도 입력하지 않고 Enter 키를 두 번 누르면 됩니다.
생성 완료
모든 과정이 끝나면 키 생성이 완료되었다는 메시지와 함께 아래와 같이 공개키의 ‘지문(fingerprint)‘이 표시됩니다.
Your identification has been saved in /Users/your-username/.ssh/id_ed25519
Your public key has been saved in /Users/your-username/.ssh/id_ed25519.pub
...
이제 지정된 경로(~/.ssh/
)에 아래와 같이 두 개의 파일이 생성된 것을 확인할 수 있습니다.
id_ed25519
: 개인키 (Private Key). 나의 열쇠에 해당하며, 절대 외부에 노출하거나 타인에게 전달해서는 안 됩니다.id_ed25519.pub
: 공개키 (Public Key). 나의 자물쇠에 해당하며, 원격 서버 등 다른 곳에 복사하여 등록하는 용도로 사용됩니다..pub
확장자로 쉽게 구분할 수 있습니다.
이제 생성된 공개키(id_ed25519.pub
)의 내용을 복사하여 접속하고자 하는 서버에 등록하면, 비밀번호 없는 안전한 SSH 접속을 이용할 수 있습니다.