SSH 키젠: 초보자를 위한 완벽 가이드

SSH(Secure Shell)는 원격 서버에 안전하게 접속하기 위한 필수 도구입니다. 비밀번호를 사용하는 것보다 훨씬 강력한 보안을 제공하는 SSH 키 기반 인증 방식은 모든 개발자에게 필수적인 지식입니다. 이 글에서는 SSH 키젠(Key Generation)의 기본 개념부터 실제 사용 방법까지, 초보자의 눈높이에 맞춰 쉽고 자세하게 설명해 드릴게요.


SSH 키젠, 왜 필요할까요?

기존의 비밀번호 방식은 입력하는 과정에서 노출 위험이 있고, 무차별 대입 공격에 취약하다는 단점이 있습니다. SSH 키는 공개 키(Public Key)와 비공개 키(Private Key)라는 한 쌍의 키를 사용하여 이러한 문제를 해결합니다.

  • 비공개 키 (Private Key): 사용자 컴퓨터에 안전하게 보관되며, 절대로 외부에 노출되어서는 안 됩니다. 이 키가 있어야만 서버에 접속할 수 있습니다.
  • 공개 키 (Public Key): 접속하려는 서버에 등록하는 키입니다. 공개되어도 보안상 문제가 없습니다.

SSH 접속 시, 서버는 사용자의 공개 키를 이용해 인증 요청을 암호화하고, 사용자 컴퓨터의 비공개 키가 이를 성공적으로 복호화하면 접속이 허용되는 방식입니다. 이렇게 하면 비밀번호를 주고받을 필요 없이 안전하게 통신할 수 있습니다.

SSH 요정이 pub key를 전달하는 장면


SSH 키 생성 방법: ssh-keygen 명령어

SSH 키를 생성하는 가장 기본적인 명령어는 ssh-keygen입니다. 터미널을 열고 다음 명령어를 입력해보세요.

ssh-keygen

명령어를 실행하면 몇 가지 질문이 나옵니다. 하나씩 살펴볼까요?

  1. Enter file in which to save the key (/home/youruser/.ssh/id_rsa):

    • 생성될 키 파일의 저장 경로를 묻는 질문입니다. 특별한 이유가 없다면 기본 경로인 .ssh/id_rsa를 사용하는 것이 좋습니다. 그냥 Enter를 누르세요.

  2. Enter passphrase (empty for no passphrase):

    • 비공개 키에 암호를 설정할지 묻는 질문입니다. 보안 강화를 위해 반드시 설정하는 것을 권장합니다. 암호를 설정하면 비공개 키가 유출되더라도 암호를 모르면 사용할 수 없으므로 이중 보안이 가능합니다. 암호를 입력하면 터미널에 아무것도 표시되지 않으니 주의하여 입력하고 Enter를 누르세요.

  3. Enter same passphrase again:

    • 앞서 입력한 암호를 다시 한번 입력하여 확인합니다.
    • 예상 결과:

Your identification has been saved in /home/youruser/.ssh/id_rsa
Your public key has been saved in /home/youruser/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx youruser@yourmachine
The key's randomart image is:
+---[RSA 3072]----+
|        .=*o.    |
|       . +.E+    |
|      . o.=. .   |
|       o  . o    |
|      . S  .     |
|       . .       |
|        .        |
|                 |
|                 |
+----[SHA256]-----+

키 생성이 완료되면 ~/.ssh/ 디렉토리에 두 개의 파일이 생성됩니다.

  • id_rsa: 비공개 키 (Private Key)
  • id_rsa.pub: 공개 키 (Public Key)

RSA vs. Ed25519: 어떤 방식을 선택할까요?

SSH 키를 생성할 때 ssh-keygen 명령에 -t 옵션을 사용하여 키의 암호화 방식을 지정할 수 있습니다. 주로 사용되는 방식은 RSAEd25519입니다.

1. RSA 방식 (-t rsa)

  • SSH 초창기부터 널리 사용되어 온 방식입니다.
  • 안정성이 검증되었고 대부분의 시스템에서 호환됩니다.
  • 키 길이를 지정할 수 있으며, 일반적으로 4096비트 사용이 권장됩니다.
    • 예시: ssh-keygen -t rsa -b 4096

2. Ed25519 방식 (-t ed25519)

  • 보다 최신 암호화 방식이며, Curve25519 타원 곡선 암호화를 기반으로 합니다.
  • RSA에 비해 더 짧은 키 길이로도 동일하거나 더 높은 수준의 보안을 제공합니다.
  • 키 생성 및 인증 속도가 빠르고, 더 적은 리소스를 사용합니다.
  • 최신 시스템에서는 대부분 지원하지만, 아주 오래된 시스템에서는 호환되지 않을 수도 있습니다.
    • 예시: ssh-keygen -t ed25519

추천 방식 및 이유

현재 시점에서는 특별한 호환성 문제가 없다면 Ed25519 방식을 사용하는 것을 강력히 추천합니다.

  • 더 나은 보안: 짧은 키 길이로도 강력한 보안을 제공하여 brute-force 공격 등에 더 강합니다.
  • 더 빠른 성능: 키 생성 및 인증 과정이 더 효율적입니다.
  • 간결성: RSA처럼 키 길이를 고민할 필요 없이 간단하게 생성할 수 있습니다.

Ed25519 키 생성 예시

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_my_server -C "my_server_ssh_key"
  • -t ed25519: Ed25519 방식으로 키를 생성합니다.
  • -f ~/.ssh/id_ed25519_my_server: 키 파일의 이름을 id_ed25519_my_server로 지정합니다. (기존 id_rsa와 구분하기 위해 이름을 다르게 지정할 수 있습니다.)
  • -C "my_server_ssh_key": 키에 대한 주석(Comment)을 추가합니다. 어떤 목적으로 생성된 키인지 쉽게 알아볼 수 있도록 이름을 지정하는 것이 좋습니다.

예상 결과:

Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):  # 암호 입력 (권장)
Enter same passphrase again:                # 암호 재확인
Your identification has been saved in /home/youruser/.ssh/id_ed25519_my_server
Your public key has been saved in /home/youruser/.ssh/id_ed25519_my_server.pub
The key fingerprint is:
SHA256:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy my_server_ssh_key
The key's randomart image is:
+--[ED25519 256]--+
|      .+=+       |
|     . oE B      |
|      o + O      |
|     . + +       |
|    o . S        |
|   . = .         |
|  . B +          |
| . * = o         |
|+ o . = .        |
+----[SHA256]-----+

이제 여러분은 SSH 키를 생성하고 관리하는 기본적인 방법을 이해하셨을 겁니다. 생성된 공개 키(id_ed25519_my_server.pub 또는 id_rsa.pub)를 원격 서버의 ~/.ssh/authorized_keys 파일에 등록하면 비밀번호 없이 안전하게 접속할 수 있습니다. 다음 글에서는 생성된 SSH 키를 서버에 등록하고 사용하는 방법에 대해 자세히 알아보겠습니다.

궁금한 점이 있다면 언제든지 댓글로 질문해주세요!