Skip to content

SSH와 키 인증

💡 학습 가이드: git push 할 때마다 비밀번호를 입력하시나요? 서버 연결 시 "Permission denied" 오류가 뜨나요? 이 장에서는 5분 만에 SSH 키 인증의 원리와 GitHub 및 서버에 비밀번호 없이 로그인하는 방법을 알아봅니다.


0. 여러분도 이런 상황을 겪어보셨을 겁니다

  • git push 할 때마다 비밀번호 입력창이 반복적으로 뜨는 불편함
  • SSH 서버 연결 실패 시 id_rsaid_ed25519가 무엇인지 몰라 당황
  • "공개키"와 "비공개키"라는 말은 들어봤지만 어떤 것을 공유하고 어떤 것을 보관해야 하는지 헷갈림

핵심 문제: 비밀번호는 안전하지도 않고 번거롭기까지 합니다. SSH 키는 보안성과 편리함을 동시에 해결하는 방안입니다.


1. 비밀번호 vs 키: 왜 키가 더 나은가?

👇 클릭해서 비교해 보세요: 비밀번호 로그인과 키 로그인의 차이

SSH Key Authentication: Your Digital IDSymmetric vs asymmetric encryption · key pair generation · authentication flow
🔑
Password login
1Enter username and password
2Password is sent to the server over the network
3Server checks whether the password is correct
4You must enter the password every time
⚠️The password travels over the network and may be intercepted
🔐
Key login
1Put the public key on the server in advance
2Send identity when connecting, without sending the private key
3Server asks a mathematical challenge with the public key
4Your private key answers locally and only sends the answer
The private key never leaves your computer
Core idea:SSH key login is safer than passwords because the private key never travels over the network and cannot be stolen by a man-in-the-middle.

💡 한 줄 요약

비밀번호 로그인 = 매번 비밀번호를 전송해서 상대방이 확인 (비밀번호가 도청될 수 있음) 키 로그인 = "열쇠를 가지고 있다"는 것을 증명하지만 열쇠 자체를 보여주지는 않음 (비공개키는 절대 전송되지 않음)


2. 비대칭 암호화: 공개키와 비공개키

SSH 키는 비대칭 암호화를 기반으로 하며, 한 번 생성 시 두 개의 키가 만들어집니다:

비공개키 (Private Key)공개키 (Public Key)
보관 위치내 컴퓨터 ~/.ssh/id_ed25519서버/GitHub
공유해도 될까?❌ 절대 안 됨✅ 자유롭게 공유 가능
기능서명 (신원 증명)서명 검증 (신원 확인)
비유열쇠자물쇠

주요 키 유형

유형명령어추천도설명
Ed25519ssh-keygen -t ed25519⭐⭐⭐최신, 가장 빠르고 안전함
RSAssh-keygen -t rsa -b 4096⭐⭐호환성 우수, 하지만 속도가 느림
ECDSAssh-keygen -t ecdsa일반적으로 권장하지 않음

3. 실전: SSH 키 생성 및 설정

3.1 키 페어 생성

bash
ssh-keygen -t ed25519 -C "your@email.com"

실행 후 다음과 같은 프롬프트가 표시됩니다:

  • 파일 경로: Enter를 눌러 기본 경로 ~/.ssh/id_ed25519 사용
  • 암호문: 추가 보호를 위한 암호 설정 가능 (비워둘 수도 있음)

3.2 GitHub에 공개키 추가

bash
# 1. 공개키 내용 복사
cat ~/.ssh/id_ed25519.pub | pbcopy  # macOS
cat ~/.ssh/id_ed25519.pub | xclip   # Linux

# 2. GitHub → Settings → SSH and GPG keys → New SSH key 열기
# 3. 공개키 붙여넣기 후 저장

# 4. 연결 테스트
ssh -T git@github.com
# 성공 시: Hi username! You've been authenticated... 확인

3.3 서버에 공개키 추가

bash
# 방법 1: ssh-copy-id (권장)
ssh-copy-id user@your-server

# 방법 2: 수동 복사
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

4. SSH Config: 긴 명령어 작별

~/.ssh/config에 별칭을 설정하면 한 번의 설정으로 계속 편리하게 사용할 수 있습니다:

Host dev
  HostName 192.168.1.100
  User deploy
  IdentityFile ~/.ssh/id_ed25519

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519

설정 후 효과:

이전이후
ssh -i ~/.ssh/id_ed25519 deploy@192.168.1.100ssh dev
매번 IP와 사용자 이름을 기억해야 함별칭 하나만 기억하면 됨

5. 자주 발생하는 문제 해결

문제원인해결책
Permission denied (publickey)공개키가 서버에 추가되지 않음ssh-copy-id user@server
WARNING: UNPROTECTED PRIVATE KEY FILE비공개키 파일 권한이 너무 넓음chmod 600 ~/.ssh/id_ed25519
Could not resolve hostnameSSH Config 설정 오류~/.ssh/config 형식 확인
GitHub에서 계속 비밀번호 요구SSH 대신 HTTPS 사용 중git@github.com:user/repo.git 형식으로 변경

6. 요약

📚 핵심 포인트

  1. 키 > 비밀번호: 비공개키는 전송되지 않으므로 비밀번호보다 훨씬 안전합니다
  2. Ed25519 권장: 가장 현대적인 키 알고리즘, 빠르고 높은 보안성
  3. 공개키는 자유롭게 공유, 비공개키는 절대 유출 금지: 이 철칙을 기억하세요
  4. SSH Config: 별칭을 한 번 설정하면 이후 ssh 별칭으로 한 번에 연결
  5. GitHub/GitLab: 공개키 추가 후 git push/pull 시 더 이상 비밀번호 불필요

다음 학습: