1 기본 SSH 키를 만들어야 하는 이유
기본 SSH 키(id_ed25519)는 개발 환경 구축의 첫 단계다.
- GitHub, GitLab 등 코드 저장소에서 별도 설정 없이 자동 인식된다
ssh-agent에서 자동으로 로드되어 패스프레이즈 입력을 최소화한다- 여러 서비스에서 재사용할 수 있어 매번 새로 만들 필요가 없다
별도의 IdentityFile이나 별칭을 지정하지 않은 모든 SSH 접속은 기본 키를 자동으로 사용한다.
2 SSH 키 생성
2.1 기본 명령어
| 옵션 | 설명 |
|---|---|
-t ed25519 |
EdDSA 알고리즘 기반 키 타입 (RSA보다 짧고 보안성 높음) |
-C "이메일" |
키를 식별하기 위한 주석 |
2.2 생성 과정
2.3 용도별 키 생성
특정 용도(회사, 프로젝트)에 전용 키가 필요한 경우:
# 회사 GitHub 조직용
ssh-keygen -t ed25519 -C "work@company.com" -f ~/.ssh/id_company
# Azure VM 접속용
ssh-keygen -t ed25519 -C "azure-vm" -f ~/.ssh/azure_vm_key
# RSA 4096 (구형 시스템 호환)
ssh-keygen -t rsa -b 4096 -C "legacy@email.com"-f 옵션으로 파일 경로를 지정하면 기본 키와 별도로 관리할 수 있다.
2.4 생성 결과 확인
~/.ssh/
├── id_ed25519 # 개인키 (절대 유출 금지)
├── id_ed25519.pub # 공개키 (서버에 등록)
├── known_hosts # 접속한 서버들의 호스트 키 기록
└── config # SSH 접속 설정
3 공개키 서버 등록
3.1 GitHub / GitLab
출력된 내용을 복사하여:
- GitHub: Settings → SSH and GPG keys → New SSH key
- GitLab: Preferences → SSH Keys → Add new key
등록 후 접속 테스트:
ssh -T git@github.com
Enter passphrase for key 'C:/Users/kmkim/.ssh/id_ed25519_github': ****
# Hi kmink3225! You've successfully authenticated, but GitHub does not provide shell access.3.1.1 만약 password를 잊어버렸다면?
복구 방법이 없다. 새 키를 만들어야 한다.
3.1.1.1 이유
passphrase는 개인키 파일을 암호화하는 데 사용된다. 서버 어딘가에 저장되는 게 아니라 오직 본인 머릿속에만 있는 정보다. 리셋이나 복구 기능 자체가 없다.
3.1.1.2 대처 방법
1. 새 키 쌍 생성
ssh-keygen -t ed25519 -C "email" -f ~/.ssh/id_ed25519_github_new
2. 새 공개키를 GitHub에 등록
GitHub → Settings → SSH Keys → 새 키 추가
3. 기존 키 GitHub에서 삭제
4. 기존 키 파일 삭제
rm ~/.ssh/id_ed25519_github
rm ~/.ssh/id_ed25519_github.pub
3.1.1.3 예방책
| 방법 | 설명 |
|---|---|
| passphrase 설정 안 함 | 키 생성 시 Enter만 누름, 분실 걱정 없음 |
| 비밀번호 관리자에 저장 | 1Password, Bitwarden 등에 보관 |
| ssh-agent 사용 | 자주 입력할 일 자체를 없앰 |
개인 개발용이라면 passphrase를 아예 안 거는 것도 합리적인 선택이다. 회사 서버나 중요한 키라면 비밀번호 관리자에 저장하는 걸 권장한다.
3.2 원격 서버
3.3 클라우드 VM
클라우드 서비스는 VM 생성 시 SSH 키를 등록하는 메뉴를 제공한다.
- Azure: VM 생성 시 키 쌍 자동 생성 →
.pem파일 다운로드, 또는 기존 공개키 직접 붙여넣기 - AWS: EC2 Key Pairs 메뉴에서
.pem파일 다운로드 - GCP: Compute Engine Metadata → SSH Keys
AWS EC2는 키 쌍을 .pem 파일로 발급한다. .pem은 Privacy Enhanced Mail의 약자로, 텍스트 형식의 개인키 파일이다. SSH 접속 시 ssh -i key.pem user@server 형태로 사용한다.
4 파일 권한 설정
SSH는 보안상 키 파일 권한이 엄격하게 제한되지 않으면 동작을 거부한다.
chmod 700 ~/.ssh # .ssh 디렉터리
chmod 600 ~/.ssh/id_ed25519 # 개인키: 소유자만 읽기/쓰기
chmod 644 ~/.ssh/id_ed25519.pub # 공개키: 모두 읽기 가능
chmod 600 ~/.ssh/authorized_keys # 서버의 authorized_keys
chmod 600 ~/.ssh/config # SSH 설정 파일권한이 너무 넓으면 다음 오류가 발생한다:
WARNING: UNPROTECTED PRIVATE KEY FILE!
Permissions 0644 for '/home/user/.ssh/id_ed25519' are too open.
개인키(Private Key)는 소유자만 읽을 수 있어야 한다 (chmod 600). 이는 SSH가 강제하는 보안 요구사항이다.
5 ssh-agent: 패스프레이즈 관리
패스프레이즈를 설정한 키는 사용할 때마다 비밀번호를 입력해야 한다. ssh-agent는 키를 메모리에 캐시하여 세션 동안 자동 인증을 제공한다.
5.1 기본 사용법
5.2 Windows PowerShell
5.3 Git Bash (Windows)
ssh-agent는 현재 셸 세션에서만 유효하다. 새 터미널을 열면 다시 eval $(ssh-agent -s) + ssh-add를 실행해야 한다.
5.4 Config에서 자동 등록
~/.ssh/config에 다음을 추가하면 접속 시 자동으로 agent에 키를 등록한다:
Host *
AddKeysToAgent yes
6 다중 키 관리
개인/업무/클라우드 환경을 분리하는 경우 여러 키를 사용한다.
6.1 디렉터리 구조
~/.ssh/
├── id_ed25519 # 개인용 기본 키 (GitHub 개인계정)
├── id_ed25519.pub
├── id_company # 회사 서버용 키
├── id_company.pub
├── azure_vm_key # Azure VM 접속용 키
├── azure_vm_key.pem
├── aws_key.pem # AWS EC2 접속용 키 (PEM 형식)
├── config # 모든 키를 관리하는 설정 파일
└── known_hosts # 서버 호스트 키 기록
6.2 Config에서 키 매핑
# ~/.ssh/config
# 개인 GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
# 회사 GitHub (별도 키)
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_company
# Azure VM
Host azure-dev
HostName 20.82.xxx.xxx
User azureuser
IdentityFile ~/.ssh/azure_vm_key.pem같은 github.com이라도 별칭을 사용하면 용도별로 다른 키를 사용할 수 있다.
7 .pem 파일 관리
AWS, Azure 등에서 발급하는 .pem 파일은 개인키(Private Key)이다.
.pem 파일은 비밀번호와 같다. 유출되면 누구나 서버에 접속할 수 있다.
- 반드시
~/.ssh/폴더에 보관한다 - 다운로드 폴더, 클라우드 동기화 폴더에 두지 않는다
- 이메일, 메신저로 공유하지 않는다
- Git 저장소에 커밋하지 않는다
8 요약
| 작업 | 명령어 |
|---|---|
| 키 생성 (Ed25519) | ssh-keygen -t ed25519 -C "email" |
| 용도별 키 생성 | ssh-keygen -t ed25519 -f ~/.ssh/키이름 |
| 공개키 서버 등록 | ssh-copy-id -i ~/.ssh/키.pub user@server |
| 접속 테스트 | ssh -T git@github.com |
| 권한 설정 (개인키) | chmod 600 ~/.ssh/id_ed25519 |
| agent 시작 | eval "$(ssh-agent -s)" |
| agent에 키 등록 | ssh-add ~/.ssh/id_ed25519 |
| 등록된 키 확인 | ssh-add -l |