Skip to main content

SSH Key 알아보기

·636 words·3 mins
미뇽
Author
미뇽
안녕하세요! 기술로 세상을 이롭게 만들고 싶은 개발자 미뇽입니다.
Table of Contents

서버에 접속할 때마다 비밀번호를 입력하는 방식은 편리하지만, 보안에 취약할 수 있습니다. 오늘은 비밀번호 없이도 훨씬 안전하고 편리하게 서버에 접속할 수 있게 해주는 SSH Key에 대해, 그 원리부터 생성 방법까지 알아보고자 합니다.

SSH Key는 공개키 암호화 방식을 기반으로 동작하는 한 쌍의 암호화 키입니다. ‘자물쇠’ 역할을 하는 공개키(Public Key) 와, 오직 그 자물쇠만 열 수 있는 ‘열쇠’인 개인키(Private Key) 로 구성되어, 안전한 통신을 보장하는 핵심적인 보안 도구입니다.

작동 원리
#

SSH Key의 작동 방식은 자물쇠와 열쇠의 비유로 쉽게 이해할 수 있습니다.

  1. 키 쌍 생성: 사용자는 먼저 자신의 컴퓨터(클라이언트)에서 개인키(열쇠)공개키(자물쇠) 한 쌍을 생성합니다.

  2. 공개키(자물쇠) 등록: 접속하려는 원격 서버에 나의 공개키(자물쇠)를 미리 복사하여 등록해 둡니다. (~/.ssh/authorized_keys 파일에 추가하는 방식)

  3. 접속 시도: 내 컴퓨터에서 원격 서버로 SSH 접속을 시도합니다.

  4. 인증 과정:

    • 서버는 접속을 시도한 사용자를 확인하기 위해, 미리 등록된 공개키(자물쇠) 로 암호화한 임의의 메시지(챌린지)를 사용자 컴퓨터로 보냅니다.

    • 이 암호화된 메시지는 오직 쌍을 이루는 개인키(열쇠) 로만 해독할 수 있습니다.

    • 내 컴퓨터가 개인키를 사용해 메시지를 성공적으로 해독하여 응답하면, 서버는 ‘올바른 열쇠를 가진 신뢰할 수 있는 사용자’로 판단하고 비밀번호 입력 없이 접속을 허용합니다.

이 모든 과정에서 실제 비밀번호나 개인키 자체가 네트워크를 통해 전송되지 않으므로, 중간에 통신을 가로채도 정보가 유출될 위험이 없습니다.

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 접속을 이용할 수 있습니다.