logo Fonnpo

문의하기
2026년 5월 30일 1분 읽기 Fonnpo

SSH Key 생성 완전 가이드

SSH 키는 비대칭 암호화를 사용하여 비밀번호 없는 로그인과 신원 인증을 구현합니다. 알고리즘 선택, 기본 생성, 여러 플랫폼과 계정 관리, ssh-agent 설정, 서버 배포, Windows 환경, 자주 발생하는 문제 해결까지 모든 상황을 한 곳에 정리했습니다.

#DevOps#SSH#Git

SSH 키는 비대칭 암호화를 사용하여 비밀번호 없는 로그인과 신원 인증을 구현합니다. 비밀번호보다 안전하고 편리합니다. 이 글에서는 일상 개발에서 자주 등장하는 다양한 상황을 다룹니다.

알고리즘 선택

키를 생성하기 전에 알고리즘을 결정합니다.

알고리즘권장도설명
Ed25519✅ 최우선현대적 타원 곡선 알고리즘. 짧은 키, 빠른 속도, 강한 보안성
RSA 4096✅ 호환용호환성 최고. 레거시 시스템에 필수. 키가 길다
ECDSA⚠️ 사용 가능RSA보다 짧지만 일부 구현에 취약점 있음
RSA 2048❌ 비권장현재 강도 부족으로 간주됨
DSA❌ 비권장폐기됨

결론: 새 환경에는 Ed25519를 우선 사용하고, 레거시 시스템 호환이 필요한 경우에만 RSA 4096을 사용하세요.

기본: 첫 번째 SSH 키 생성

Ed25519 (권장)

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

    

RSA 4096 (호환용)

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

    

실행하면 다음 프롬프트가 나타납니다:

Properties
        Enter file in which to save the key (/Users/you/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

    
  • 파일 경로: Enter를 눌러 기본 경로 사용
  • 패스프레이즈: 설정 권장. 개인 키에 추가적인 암호 보호를 추가합니다

생성 후:

  • ~/.ssh/id_ed25519 — 개인 키. 절대 공개하거나 업로드하지 마세요
  • ~/.ssh/id_ed25519.pub — 공개 키. 각 플랫폼에 붙여넣어 사용합니다

공개 키 내용 확인

Bash
        cat ~/.ssh/id_ed25519.pub

    

출력 예시:

Properties
        ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... your_email@example.com

    

이 한 줄을 복사해서 GitHub / GitLab / 서버의 authorized_keys에 붙여넣으면 됩니다.

상황 1: 여러 플랫폼, 여러 계정 (가장 일반적)

개인 GitHub 계정, 회사 GitHub 계정, GitLab, 내부 서버를 동시에 사용하는 것은 매우 흔합니다. 각각 독립적인 키가 필요합니다.

1단계: 여러 키를 생성하고 각각 이름 지정

Bash
        # 개인 GitHub
ssh-keygen -t ed25519 -C "me@personal.com" -f ~/.ssh/id_ed25519_github_personal

# 회사 GitHub
ssh-keygen -t ed25519 -C "me@work.com" -f ~/.ssh/id_ed25519_github_work

# GitLab
ssh-keygen -t ed25519 -C "me@work.com" -f ~/.ssh/id_ed25519_gitlab

# 내부 서버
ssh-keygen -t ed25519 -C "server" -f ~/.ssh/id_ed25519_server

    

2단계: ~/.ssh/config 설정

~/.ssh/config
        # 개인 GitHub
Host github-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github_personal

# 회사 GitHub
Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github_work

# GitLab
Host gitlab.com
    HostName gitlab.com
    User git
    IdentityFile ~/.ssh/id_ed25519_gitlab

# 내부 서버
Host dev-server
    HostName 192.168.1.100
    User ubuntu
    Port 22
    IdentityFile ~/.ssh/id_ed25519_server

    

3단계: 별칭을 사용해 작업

Bash
        # 개인 저장소 클론 (github.com 대신 Host 별칭 사용)
git clone git@github-personal:username/repo.git

# 회사 저장소 클론
git clone git@github-work:company/repo.git

# 서버에 직접 SSH 로그인
ssh dev-server

    

상황 2: ssh-agent에 키 등록

개인 키에 패스프레이즈가 설정되어 있으면 매번 입력해야 합니다. ssh-agent는 세션 동안 패스프레이즈를 기억해 줍니다.

Bash
        # agent 시작 (보통 자동 시작됨)
eval "$(ssh-agent -s)"

# 개인 키를 agent에 추가
ssh-add ~/.ssh/id_ed25519

# 등록된 키 목록 확인
ssh-add -l

    

macOS 영구 저장 (Keychain에 저장하여 재시작 후에도 재등록 불필요):

Bash
        ssh-add --apple-use-keychain ~/.ssh/id_ed25519

    

~/.ssh/config에 다음 줄을 추가하여 macOS가 자동으로 Keychain을 사용하게 합니다:

Properties
        Host *
    AddKeysToAgent yes
    UseKeychain yes

    

상황 3: 서버에 공개 키 배포

방법 1: ssh-copy-id (가장 간단)

Bash
        ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip

    

방법 2: 파이프로 전송

Bash
        cat ~/.ssh/id_ed25519.pub | ssh user@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

    

방법 3: 서버에서 직접 편집

서버에 로그인 후:

Bash
        mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "공개 키 내용 붙여넣기" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

    

권한이 잘못되면 SSH가 거부합니다:

경로권한
~/.ssh/700
~/.ssh/authorized_keys600
개인 키 파일600
공개 키 파일644

상황 4: Windows 환경

Windows는 몇 가지 다른 설정이 필요합니다.

Git Bash / WSL

macOS/Linux와 절차가 거의 같습니다. ~/.ssh/ 경로도 동일하게 작동합니다.

PowerShell (내장 OpenSSH)

Windows 10 1809 이상은 OpenSSH가 기본 탑재됩니다:

Bash
        # 키 생성
ssh-keygen -t ed25519 -C "your_email@example.com"

# 키 저장 위치:
# C:\Users\사용자명\.ssh\id_ed25519

    

ssh-agent 서비스 활성화

Bash
        # 관리자 권한으로 실행
Set-Service -Name ssh-agent -StartupType Automatic
Start-Service ssh-agent

# 키 추가
ssh-add $env:USERPROFILE\.ssh\id_ed25519

    

상황 5: 연결 테스트

설정 후 정상 동작 여부를 확인합니다:

Bash
        # GitHub 테스트
ssh -T git@github.com
# 출력: Hi username! You've successfully authenticated...

# 별칭으로 테스트
ssh -T git@github-personal

# 서버 테스트 (-v는 상세 로그 출력, 문제 해결에 사용)
ssh -v user@server_ip

    

상황 6: 키 교체 및 폐기

새 키를 생성한 후 해야 할 작업:

  1. 모든 플랫폼 / 서버에 새 공개 키 추가
  2. 각 플랫폼 / 서버에서 기존 공개 키 제거
  3. 로컬의 기존 개인 키 파일 삭제 (선택 사항)
Bash
        # agent에서 기존 키 제거
ssh-add -d ~/.ssh/old_key

# 기존 키 파일 삭제
rm ~/.ssh/old_key ~/.ssh/old_key.pub

    

서버에서 기존 공개 키 제거:

Bash
        # authorized_keys를 편집하여 해당 줄 삭제
nano ~/.ssh/authorized_keys

    

자주 발생하는 문제

Permission denied (publickey)

  • 공개 키가 대상 플랫폼에 추가되어 있는지 확인
  • ~/.ssh/authorized_keys 권한이 600인지 확인
  • ssh -v로 핸드셰이크 상세 내용 확인

매번 패스프레이즈를 요구함

  • ssh-agent에 키 등록: ssh-add ~/.ssh/id_ed25519
  • macOS는 --apple-use-keychain으로 영구 저장

git이 어떤 키를 사용하는지 확인하고 싶을 때

Bash
        # 현재 어떤 신원이 활성화되어 있는지 확인
ssh -T git@github.com

# 특정 키를 지정해서 테스트
ssh -i ~/.ssh/id_ed25519_github_personal -T git@github.com

    
Fonnpo