SSH Key 완전 정복

안녕하세요. 미뇽입니다.

혹시 원격 서버에 접속하거나 GitHub에 코드를 푸시할 때 “SSH Key를 사용하라”는 메시지를 보고 당황하셨던 경험이 있으신가요? 저도 개발을 처음 시작했을 때 이 SSH Key라는 것이 도대체 무엇인지, 왜 필요한지 몰라 한참을 헤맸던 기억이 납니다. 하지만 한번 익숙해지고 나니 이보다 더 편리하고 안전한 인증 방식이 없다는 것을 깨닫게 되었죠. 그래서 오늘은 개발자라면 꼭 알아야 할 SSH Key에 대해 A부터 Z까지, 제 경험을 바탕으로 쉽고 자세하게 알려드리고자 합니다.

SSH Key란 무엇일까요?

SSH는 Secure Shell의 약자로, 네트워크로 연결된 다른 컴퓨터에 안전하게 접속하고 명령을 실행할 수 있게 해주는 암호화된 통신 프로토콜입니다. 우리가 흔히 사용하는 ssh user@hostname 같은 명령어가 바로 이 SSH 프로토콜을 사용하는 예시죠.

그리고 SSH Key는 바로 이 SSH 프로토콜을 사용할 때, 기존의 비밀번호 방식 대신 사용하는 한 쌍의 암호화된 열쇠라고 생각하시면 됩니다. 이 열쇠 쌍은 다음과 같이 두 개의 파일로 구성됩니다.

  • 공개 키 (Public Key): 이름처럼 공개해도 되는 키입니다. 이 키를 접속하려는 서버(예: GitHub, 회사 리눅스 서버 등)에 등록해두면, 서버는 이 공개 키와 한 쌍인 개인 키를 가진 사용자만 인증하게 됩니다. id_rsa.pub 또는 id_ed25519.pub와 같은 파일명을 가집니다.
  • 개인 키 (Private Key): 절대로 외부에 유출되어서는 안 되는, 나만 가지고 있어야 하는 비밀 열쇠입니다. 내 컴퓨터에 안전하게 보관해야 하며, 이 개인 키가 있어야만 해당 공개 키가 등록된 서버에 접속할 수 있습니다. id_rsa 또는 id_ed25519와 같은 파일명을 가집니다.

쉽게 비유하자면, 공개 키는 자물쇠, 개인 키는 그 자물쇠를 열 수 있는 유일한 열쇠라고 생각할 수 있습니다. 자물쇠(공개 키)는 여러 곳에 걸어둘 수 있지만, 열쇠(개인 키)는 나만 가지고 있어야 안전하겠죠?

SSH Key는 왜 필요할까요?

“비밀번호만으로도 충분한 것 같은데, 왜 굳이 SSH Key를 써야 하나요?” 라고 생각하실 수도 있습니다. SSH Key를 사용하는 주된 이유는 다음과 같습니다.

  1. 향상된 보안성: 잘 만들어진 SSH Key는 무차별 대입 공격(Brute-force attack)과 같은 전통적인 비밀번호 탈취 시도로부터 훨씬 안전합니다. 비밀번호는 상대적으로 짧고 유추하기 쉬운 경우가 많지만, SSH Key는 매우 긴 암호화된 문자열로 이루어져 있어 해독이 거의 불가능에 가깝습니다.
  2. 자동화 작업의 편리성: 여러 서버에 접속하거나, GitHub에 코드를 빈번하게 푸시하는 경우, 또는 CI/CD(지속적 통합/지속적 배포) 파이프라인을 구축할 때 매번 비밀번호를 입력하는 것은 매우 번거롭습니다. SSH Key를 사용하면 비밀번호 입력 없이 자동으로 인증이 가능해져 작업 효율성이 크게 향상됩니다. 저도 사내 배포 시스템에 SSH Key를 연동해두고 자동 배포 스크립트를 사용하는데, 정말 편리합니다.
  3. 입력 실수 방지: 복잡한 비밀번호를 입력하다 보면 오타가 발생하기 쉽습니다. SSH Key는 파일 형태로 관리되므로 이러한 입력 실수를 원천적으로 방지할 수 있습니다.

SSH Key 생성 방법

그럼 이제 SSH Key를 직접 만들어 볼까요? 터미널(macOS나 Linux의 경우) 또는 Git Bash(Windows의 경우)를 열고 다음 명령어를 입력하면 됩니다.

가장 권장되는 ed25519 타입의 키를 생성하는 명령어는 다음과 같습니다.

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

만약 기존 시스템과의 호환성이 중요하다면 rsa 타입을 사용할 수도 있습니다. 이때는 키 길이를 충분히 길게 설정하는 것이 좋습니다 (예: 4096비트).

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

각 옵션의 의미는 다음과 같습니다.

  • -t: 생성할 키의 타입(type)을 지정합니다. (예: ed25519, rsa)
  • -b: 키의 비트 수(bits)를 지정합니다. rsa 타입에서만 사용되며, 숫자가 클수록 보안 강도가 높아집니다. (예: 2048, 4096)
  • -C: 주석(comment)을 추가합니다. 보통 식별을 위해 이메일 주소를 사용합니다.

명령어를 실행하면 키를 저장할 경로와 파일명, 그리고 Passphrase(암호 구문)를 입력하라는 메시지가 차례로 나타납니다. 기본 설정을 사용하려면 그냥 Enter 키를 누르면 됩니다.

  • 파일 저장 경로: 특별한 이유가 없다면 기본 경로인 ~/.ssh/ 디렉토리에 지정된 파일명(예: id_ed25519, id_rsa)으로 저장하는 것이 일반적입니다.
  • Passphrase: 개인 키 파일을 암호화하는 추가적인 비밀번호입니다. 만약 개인 키 파일이 유출되더라도 이 Passphrase를 모르면 키를 사용할 수 없도록 한 번 더 보호해주는 역할을 합니다. 설정하는 것이 보안상 더 안전하지만, 매번 키 사용 시 입력해야 하는 번거로움이 있습니다. 자동화 스크립트 등에서는 생략하기도 합니다.

생성이 완료되면 ~/.ssh/ 디렉토리 안에 두 개의 파일이 생성된 것을 확인할 수 있습니다. 예를 들어 ed25519 타입으로 키를 생성했다면:

  • ~/.ssh/id_ed25519: 개인 키 (절대 외부에 공개하거나 공유하면 안 됩니다!)
  • ~/.ssh/id_ed25519.pub: 공개 키 (서버나 GitHub 등에 등록할 때 이 파일의 내용을 사용합니다.)

키 타입과 길이, 어떤 걸 써야 할까요?

SSH Key에는 여러 암호화 알고리즘(타입)이 있으며, 각각 보안성, 생성 속도, 호환성 등에서 차이가 있습니다.

키 타입설명권장 여부
ed25519빠르고 안전한 최신 알고리즘입니다. 키 길이가 고정되어 있습니다.★ 가장 권장
rsa전통적으로 널리 사용되는 방식이며, 호환성이 좋습니다. 키 길이 조절이 가능합니다.여전히 널리 사용됨
ecdsa타원 곡선 기반의 알고리즘으로, 일부 시스템에서 사용됩니다.제한적 환경에서만
dsa오래된 방식으로, 현재는 보안 취약점이 발견되어 사용하지 않는 것이 좋습니다.사용 금지

RSA 키의 경우, 키 길이에 따라 보안 수준이 달라집니다.

길이설명
2048 비트현재 최소 권장 보안 수준입니다.
4096 비트매우 강력한 보안을 제공하지만, 속도는 다소 느릴 수 있습니다.
1024 비트취약점이 존재하므로 사용하지 않는 것이 좋습니다.

결론적으로, 새로운 시스템이나 개인적인 용도로 SSH Key를 생성한다면 ed25519 타입을 사용하는 것이 가장 좋습니다. 만약 오래된 시스템과의 호환성을 반드시 고려해야 한다면 rsa 타입에 키 길이를 4096비트로 설정하여 사용하는 것을 권장합니다. 저도 개인 프로젝트나 새로운 서버에는 주로 ed25519를 사용하고 있습니다.

Passphrase란 무엇이고, 왜 중요할까요?

앞서 키 생성 과정에서 언급된 Passphrase는 개인 키 파일 자체를 보호하기 위한 추가적인 암호입니다. 마치 중요한 문서가 들어있는 금고에 다시 한번 비밀번호를 거는 것과 같습니다.

만약 여러분의 개인 키 파일(id_ed25519 또는 id_rsa)이 실수로 혹은 해킹으로 인해 외부에 유출되더라도, 공격자가 이 Passphrase를 알지 못하면 해당 개인 키를 사용할 수 없습니다. 따라서 Passphrase를 설정하는 것은 SSH Key의 보안을 한층 더 강화하는 중요한 단계입니다.

다만, Passphrase를 설정하면 SSH Key를 사용할 때마다 이 Passphrase를 입력해야 하는 번거로움이 있습니다. 그래서 다음 섹션에서 소개할 ssh-agent를 함께 사용하면 편리함과 보안성을 모두 챙길 수 있습니다.

ssh-agent로 편하게 사용하기

매번 SSH 접속 시 또는 Git 작업 시 Passphrase를 입력하는 것이 번거롭게 느껴질 수 있습니다. 이때 ssh-agent 라는 프로그램을 사용하면 매우 편리합니다.

ssh-agent는 백그라운드에서 실행되면서 여러분의 개인 키와 Passphrase를 안전하게 관리해주는 역할을 합니다. ssh-agent에 개인 키를 한 번 등록해두면 (이때 Passphrase를 입력합니다), 그 이후로는 Passphrase를 다시 입력할 필요 없이 SSH Key 인증을 사용할 수 있습니다. 터미널 세션이 유지되는 동안, 혹은 설정에 따라 시스템 부팅 시부터 계속 유효하게 만들 수도 있습니다.

다음은 ssh-agent 사용 예시입니다.

ssh-agent 실행 (현재 터미널 세션에 적용):

eval "$(ssh-agent -s)"

ssh-agent에 개인 키 등록 (Passphrase 입력 필요):

ssh-add ~/.ssh/id_ed25519  # ed25519 키의 경우
# ssh-add ~/.ssh/id_rsa      # rsa 키의 경우

만약 Passphrase를 설정하지 않았다면 바로 등록됩니다.

등록된 키 목록 확인:

ssh-add -l

등록된 모든 키 제거:

ssh-add -D

특히 자동화 스크립트나 CI/CD 환경에서는 ssh-agent를 활용하여 Passphrase가 설정된 개인 키를 안전하고 편리하게 사용할 수 있습니다.

공개 키 등록 방법

SSH Key를 생성했다면, 이제 이 키를 사용하여 접속하려는 대상(GitHub, 원격 서버 등)에 나의 공개 키를 등록해야 합니다.

GitHub에 공개 키 등록 방법

GitHub에 코드를 푸시하거나 클론할 때 HTTPS 방식 대신 SSH 방식을 사용하면 매번 아이디와 비밀번호를 입력할 필요가 없어 편리합니다.
먼저, 내 컴퓨터에 저장된 공개 키 파일의 내용을 복사합니다. 터미널에서 다음 명령어를 사용하면 편리합니다.

cat ~/.ssh/id_ed25519.pub  # 이 내용을 복사합니다.
  1. GitHub에 로그인한 후, 오른쪽 상단 프로필 아이콘을 클릭하여 Settings로 이동합니다.
  2. 왼쪽 메뉴에서 SSH and GPG keys를 선택합니다.
  3. New SSH key 또는 Add SSH key 버튼을 클릭합니다.
  4. Title에는 이 키를 식별할 수 있는 적절한 이름(예: “My MacBook Pro”, “Work Laptop”)을 입력합니다.
  5. Key 필드에는 위에서 복사한 공개 키 내용을 그대로 붙여넣습니다.
  6. Add SSH key 버튼을 클릭하여 저장합니다.

이제 이 SSH Key를 사용하여 GitHub 저장소에 접근할 수 있습니다.

** 원격 리눅스 서버에 공개 키 등록 방법**

원격 리눅스 서버에 비밀번호 없이 SSH로 접속하려면, 해당 서버의 ~/.ssh/authorized_keys 파일에 나의 공개 키를 추가해야 합니다.
가장 간편한 방법은 ssh-copy-id 명령어를 사용하는 것입니다. (로컬 컴퓨터에 ssh-copy-id가 설치되어 있어야 합니다.)

ssh-copy-id user@your-server-ip

위 명령어를 실행하면 원격 서버의 비밀번호를 한 번 입력하라는 메시지가 나오고, 성공적으로 인증되면 자동으로 공개 키가 서버의 ~/.ssh/authorized_keys 파일에 추가됩니다.
만약 ssh-copy-id를 사용할 수 없거나 수동으로 등록하고 싶다면, 다음과 같이 할 수 있습니다.

cat ~/.ssh/id_ed25519.pub | ssh user@your-server-ip 'mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'

이 명령어는 로컬의 공개 키 파일 내용을 읽어, SSH를 통해 원격 서버에 접속한 뒤 ~/.ssh 디렉토리가 없다면 생성하고, authorized_keys 파일에 공개 키 내용을 추가한 후 적절한 권한을 설정합니다.

~/.ssh/authorized_keys 파일은 서버 입장에서 “이 공개 키들을 가진 사용자들은 비밀번호 없이 접속을 허용한다”는 목록과 같습니다. 따라서 이 파일의 권한 설정도 중요합니다. 보통 소유자만 읽고 쓸 수 있도록(600) 설정합니다.

마무리하며

처음에는 SSH Key의 개념이나 생성, 등록 과정이 다소 복잡하고 어렵게 느껴질 수 있습니다. 저도 처음에는 용어 하나하나가 생소했고, 공개 키와 개인 키의 역할이 헷갈리기도 했습니다. 하지만 SSH Key는 개발자라면 반드시 익숙해져야 할 핵심적인 도구 중 하나라고 생각합니다. 한번 제대로 설정해두면, 이후 개발 과정에서의 편리함과 보안성 향상은 기대 이상일 것입니다.

오늘 설명드린 내용을 바탕으로 직접 SSH Key를 생성해보고, 자주 사용하는 GitHub이나 개인 서버에 등록하여 사용해보시는 것을 강력히 추천합니다. 몇 번의 시행착오를 겪더라도, 그 과정에서 얻는 경험은 여러분의 개발 역량을 한 단계 성장시키는 밑거름이 될 것입니다. SSH Key를 통해 더 안전하고 편리한 개발 환경을 구축하시길 바랍니다!

여러분은 SSH Key를 어떻게 활용하고 계신가요? 혹은 SSH Key를 사용하시면서 겪었던 어려움이나 공유하고 싶은 팁이 있다면 댓글로 자유롭게 남겨주세요!

읽어주셔서 감사합니다. 🙂

“SSH Key 완전 정복”에 대한 3개의 생각

  1. 핑백: Oracle Cloud VM 인스턴스 생성 가이드 – Tasting Everything

  2. 핑백: Oracle Cloud VM 파일 관리, FileZilla SFTP로 쉽게 해결! – Tasting Everything

  3. 핑백: Oracle Cloud VM Instance 에 WordPress 설치하기 – Tasting Everything

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤