Post

ssh key란 무엇인가?

ssh key란 무엇인가?

🔐 1. SSH Key란 무엇인가?

SSH Key는 원격 서버에 안전하게 접속하거나, 버전 관리 시스템(GitHub, GitLab 등)에서 사용자의 신원을 인증할 때 사용하는 암호화 기반의 인증 수단입니다. SSH(Secure Shell)는 원격 시스템과 암호화된 연결을 제공하는 프로토콜이며, SSH Key는 그 연결에서 비밀번호 대신 사용됩니다.

🔑 기본 개념: 공개키와 개인키

SSH Key는 다음과 같은 비대칭 암호화 방식에 기반합니다.

  • 개인키 (Private Key): 본인의 컴퓨터에 보관하며 절대 외부에 공개되지 않아야 합니다. 이 키는 연결 시 클라이언트가 사용하는 비밀 키입니다.
  • 공개키 (Public Key): 서버나 서비스(GitHub 등)에 등록하며, 누구나 접근 가능한 키입니다. 서버는 이 키를 통해 클라이언트의 개인키가 맞는지를 확인합니다.

🔁 인증 과정 요약

  1. 클라이언트는 서버에 접속 요청을 보냅니다.
  2. 서버는 클라이언트에게 임의의 데이터를 보냅니다.
  3. 클라이언트는 개인키로 서명하여 응답합니다.
  4. 서버는 등록된 공개키로 이 응답을 검증합니다.
  5. 유효하다면 접속이 허용됩니다.

이 방식은 비밀번호 입력 없이 안전하게 인증을 수행할 수 있게 해주며, 특히 보안성이 중요한 환경에서 널리 사용됩니다.

📚 비대칭키 vs 대칭키

구분대칭키비대칭키 (SSH Key 등)
키 개수하나 (같은 키로 암복호화)두 개 (공개키/개인키)
보안성키가 노출되면 치명적개인키만 보호하면 됨
사용 예시HTTPS 세션 암호화SSH, GPG, Git 인증

📦 파일 구성 예시

SSH Key를 생성하면 보통 다음과 같은 파일이 생성됩니다:

  • ~/.ssh/id_rsa 또는 id_ed25519 : 개인키
  • ~/.ssh/id_rsa.pub 또는 id_ed25519.pub : 공개키

💡 SSH Key의 장점

  • 비밀번호보다 안전함: 예측이 어렵고 유출 가능성 낮음
  • 자동화에 유리함: CI/CD, 자동 배포 등에서 사용
  • 접속 제어가 쉬움: 공개키만 삭제하면 접속 차단 가능

🛡️ 2. 왜 SSH Key를 사용하는가?

SSH Key는 단순히 보안만을 위한 도구가 아닙니다. 실제 환경에서 사용자가 서버 또는 서비스와 상호작용할 때, SSH Key는 보안성, 효율성, 확장성 면에서 강력한 이점을 제공합니다.

🔒 1) 보안성 향상

  • 무차별 대입 공격 방지: 일반 비밀번호 인증은 여러 패스워드를 시도하여 침입하는 공격에 노출되기 쉽습니다. 반면 SSH Key는 무작위 생성된 매우 긴 키를 사용하여 사실상 해킹이 불가능에 가깝습니다.
  • 암호화된 연결: 통신 자체도 암호화되어 있어, 전송 중 정보가 노출되지 않습니다.
  • 패스프레이즈 설정 가능: 개인키 자체에 비밀번호를 추가로 걸 수 있어 이중 보안 가능

⚙️ 2) 자동화와 업무 효율성

  • CI/CD 환경에서 사용: Git 서버와 인증할 때 매번 비밀번호를 입력하지 않아도 되어 자동화 스크립트 실행에 적합합니다.
  • 무인 서버 관리: 배치 작업이나 크론 작업에서 사용자 개입 없이 인증 가능
  • 빠른 로그인: 입력할 것이 없기 때문에 로그인 속도가 빨라짐

👥 3) 사용자 및 키 관리 용이

  • 접근 권한 제어가 단순: 공개키 한 줄을 서버에서 삭제하면 즉시 접근 차단 가능
  • 여러 키를 병렬로 관리 가능: 하나의 사용자 계정에 여러 공개키 등록 가능 → 다중 개발자 협업에 유리
  • 구성 파일로 키 지정 가능: ~/.ssh/config 파일을 통해 다양한 환경에 맞춰 키를 분기 설정 가능

🛡️ 4) 감사 및 보안 정책에 부합

  • 보안 감사 이력 관리가 수월: 키 기반 인증은 로그 기록이 명확하고 추적이 쉬움
  • 기관 및 기업 보안 기준 부합: 대부분의 보안정책(예: 비밀번호 사용금지, MFA 적용 등)과 충돌하지 않음

✅ 요약: SSH Key는 보안성을 강화하고, 자동화 효율을 높이며, 대규모 사용자 환경에서도 뛰어난 키 관리를 가능하게 합니다.


🛠️ 3. SSH Key 생성 방법

SSH Key는 로컬 컴퓨터에서 ssh-keygen 명령어를 통해 생성할 수 있습니다. 대표적인 키 알고리즘으로는 RSA와 Ed25519가 있으며, 보안성과 성능 측면에서 최근에는 Ed25519 사용이 권장됩니다.

✅ 키 생성 명령어 예시

1
ssh-keygen -t ed25519 -C "your_email@example.com"

각 옵션 설명:

  • -t ed25519 : 키 생성 방식 지정 (RSA 사용 시 rsa 입력)
  • -C : 키 식별용 주석 추가 (주로 이메일 주소 입력)

실행 후 다음과 같은 절차가 진행됩니다:

  1. 저장할 파일 경로 입력 (기본값: ~/.ssh/id_ed25519)
  2. 패스프레이즈 설정 여부 선택 (보안 강화를 위해 설정 권장)

생성된 파일:

  • ~/.ssh/id_ed25519: 개인키 (절대 외부 유출 금지)
  • ~/.ssh/id_ed25519.pub: 공개키 (서버나 서비스에 등록용)

💡 키 타입 비교

키 타입특징권장 여부
RSA오래된 방식, 호환성 높음일반 환경에서 가능
Ed25519빠르고 보안성 우수권장

🔐 패스프레이즈를 설정하면, 개인키 사용 시마다 비밀번호를 요구하게 되어 보안성이 높아집니다.


🚀 4. 생성한 SSH Key를 서버에 등록하기

생성된 공개키를 원격 서버에 등록하여 비밀번호 없이 SSH 접속이 가능하도록 설정합니다.

📌 전제 조건

  • 원격 서버가 SSH 접속을 허용해야 함
  • 접속 대상 계정에 홈 디렉터리와 .ssh 디렉터리가 존재해야 함

방법 1: ssh-copy-id 명령어 사용 (자동 등록)

1
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_server_ip
  • 해당 명령어는 로컬의 공개키를 자동으로 서버의 ~/.ssh/authorized_keys 파일에 추가함
  • 권한 설정까지 자동으로 처리되어 가장 간편함

방법 2: 수동 등록

  1. 로컬에서 공개키 내용 확인
1
cat ~/.ssh/id_ed25519.pub
  1. 서버에 로그인 후, .ssh/authorized_keys에 직접 붙여넣기
1
2
3
4
5
6
7
mkdir -p ~/.ssh
chmod 700 ~/.ssh

nano ~/.ssh/authorized_keys
# 또는 echo 명령어로 추가
# echo "공개키내용" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

접속 테스트

등록 후 아래 명령어로 테스트합니다:

1
ssh user@remote_server_ip

정상적으로 비밀번호 없이 접속되면 SSH Key 인증이 성공한 것입니다.

⚠️ 서버에 sshd 설정에서 PubkeyAuthentication yes 가 활성화되어 있어야 작동합니다 (/etc/ssh/sshd_config 참고).


This post is licensed under CC BY 4.0 by the author.