SSH를 처음 쓰면 가장 헷갈리는 부분은 명령어가 아니라 키 파일의 역할입니다. id_rsa, id_ed25519, authorized_keys, known_hosts가 모두 비슷해 보이지만 실제 역할은 완전히 다릅니다.
이 글은 개인 서버, 클라우드 VPS, GitHub, 홈랩을 운영하는 초보자를 위해 SSH 키 관리의 기본 구조를 정리합니다. 목표는 단순합니다. 어떤 파일을 어디에 둬야 하고, 무엇을 절대 공유하면 안 되는지 이해하는 것입니다.
핵심 판단
- 개인키는 절대 서버나 타인에게 보내면 안 됩니다. 내 컴퓨터에만 있어야 합니다.
- 서버에는 공개키만 등록합니다. 보통
~/.ssh/authorized_keys에 들어갑니다. - 새로 키를 만든다면 일반적으로 Ed25519를 우선 검토하면 됩니다. OpenSSH의
ssh-keygen도 인자 없이 실행하면 Ed25519 키를 생성합니다. - SSH 접속 문제의 상당수는 키 내용보다 파일 권한과 사용자명에서 발생합니다.
SSH 키는 왜 필요한가
SSH는 원격 서버에 안전하게 접속하기 위한 표준적인 방법입니다. 비밀번호로도 접속할 수 있지만, 인터넷에 노출된 서버에서는 비밀번호 로그인보다 공개키 인증을 쓰는 편이 훨씬 안전합니다.
공개키 인증은 한 쌍의 키를 사용합니다.
| 구분 | 위치 | 공유 여부 | 역할 |
|---|---|---|---|
| 개인키 | 내 컴퓨터 | 절대 공유 금지 | 내가 접속 권한을 가진 사람임을 증명 |
| 공개키 | 서버, GitHub, 클라우드 콘솔 | 공유 가능 | 이 개인키를 가진 사용자를 허용할지 확인 |
비유하면 공개키는 자물쇠, 개인키는 열쇠에 가깝습니다. 서버에 자물쇠를 등록해두고, 내 컴퓨터의 열쇠로 접속하는 구조입니다.
id_rsa와 id_ed25519의 차이
과거에는 id_rsa를 많이 사용했습니다. 지금도 RSA 키는 널리 쓰이고 호환성이 좋습니다. 하지만 새로 키를 만든다면 Ed25519를 우선 선택하는 경우가 많습니다.
| 키 타입 | 파일 예시 | 특징 | 추천 상황 |
|---|---|---|---|
| RSA | id_rsa, id_rsa.pub |
오래된 시스템과 호환성이 좋음 | 구형 서버나 특수 환경이 필요한 경우 |
| Ed25519 | id_ed25519, id_ed25519.pub |
짧고 빠르며 현대 OpenSSH에서 기본 선택에 가까움 | 새 키를 만드는 일반적인 경우 |
OpenSSH 매뉴얼 기준으로 ssh-keygen은 인증 키를 생성·관리·변환하는 도구이며, 인자 없이 실행하면 Ed25519 키를 생성합니다. 새 개인 서버용 키는 다음처럼 만들 수 있습니다.
ssh-keygen -t ed25519 -C "my-server-key"
명령을 실행하면 개인키 파일과 공개키 파일이 함께 만들어집니다. 예를 들어 ~/.ssh/id_ed25519가 개인키이고, ~/.ssh/id_ed25519.pub가 공개키입니다.
authorized_keys는 무엇인가
authorized_keys는 서버 쪽 파일입니다. 이 파일에는 “이 서버 접속을 허용할 공개키 목록”이 들어갑니다.
~/.ssh/authorized_keys
내 컴퓨터의 id_ed25519.pub 내용을 서버의 authorized_keys에 넣으면, 서버는 해당 공개키와 짝이 맞는 개인키를 가진 클라이언트의 접속을 허용할 수 있습니다.
반대로 authorized_keys에 개인키를 넣으면 안 됩니다. -----BEGIN OPENSSH PRIVATE KEY----- 같은 문구가 보이면 개인키입니다. 이 값이 서버, 메신저, 노션, GitHub 공개 저장소에 올라갔다면 노출로 보고 즉시 교체해야 합니다.
known_hosts는 또 무엇인가
known_hosts는 서버가 아니라 보통 내 컴퓨터에 있는 파일입니다.
~/.ssh/known_hosts
이 파일은 “내가 전에 접속한 서버의 호스트 키”를 기억합니다. 처음 접속할 때 보이는 다음 질문은 서버의 신원을 로컬에 저장할지 묻는 과정입니다.
The authenticity of host 'example.com' can't be established.
Are you sure you want to continue connecting?
이후 같은 서버인데 호스트 키가 바뀌면 경고가 뜹니다. 서버를 재설치했거나 IP가 재사용된 경우일 수 있지만, 중간자 공격 가능성도 있기 때문에 무시하고 넘어가면 안 됩니다.
파일 권한은 왜 중요한가
SSH는 개인키가 너무 넓은 권한으로 열려 있으면 위험하다고 보고 사용을 거부할 수 있습니다. 초보자가 가장 많이 만나는 오류 중 하나가 이 부분입니다.
| 대상 | 권장 권한 | 예시 명령 |
|---|---|---|
~/.ssh 디렉터리 |
700 | chmod 700 ~/.ssh |
| 개인키 | 600 | chmod 600 ~/.ssh/id_ed25519 |
| 공개키 | 644 가능 | chmod 644 ~/.ssh/id_ed25519.pub |
서버의 authorized_keys |
600 | chmod 600 ~/.ssh/authorized_keys |
키를 여러 개 쓸 때는 SSH Config를 쓰자
서버가 하나일 때는 다음처럼 접속해도 됩니다.
ssh -i ~/.ssh/id_ed25519 ubuntu@203.0.113.10
하지만 서버가 늘어나면 ~/.ssh/config를 쓰는 편이 안전하고 편합니다.
Host oci-server
HostName 203.0.113.10
User ubuntu
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
이제 다음처럼 접속할 수 있습니다.
ssh oci-server
OpenSSH의 ssh_config는 명령줄 옵션, 사용자 설정 파일, 시스템 설정 파일 순서로 설정을 읽습니다. 여러 서버를 운영한다면 host별 설정을 앞쪽에 두고, 공통 기본값은 뒤쪽에 두는 방식이 관리하기 좋습니다.
GitHub 키와 서버 키는 분리하는 편이 좋다
초보자는 하나의 SSH 키를 GitHub, 개인 서버, 클라우드 콘솔에 모두 등록하기 쉽습니다. 가능은 하지만 운영 관점에서는 권장하기 어렵습니다. 한 키가 노출되면 연결된 모든 서비스의 접근 권한을 한 번에 회수해야 하기 때문입니다.
실무적으로는 용도별 키를 나누는 편이 안전합니다.
| 용도 | 예시 파일 | 등록 위치 |
|---|---|---|
| GitHub 작업 | ~/.ssh/id_ed25519_github |
GitHub SSH keys |
| OCI 서버 접속 | ~/.ssh/id_ed25519_oci |
서버 authorized_keys 또는 OCI 콘솔 |
| 실험용 서버 | ~/.ssh/id_ed25519_lab |
해당 실험 서버 |
~/.ssh/config에 host별로 어떤 키를 쓸지 적어두면 실수도 줄어듭니다.
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
IdentitiesOnly yes
Host oci-web
HostName 203.0.113.10
User ubuntu
IdentityFile ~/.ssh/id_ed25519_oci
IdentitiesOnly yes
이렇게 분리해두면 GitHub 키를 바꿔도 서버 접속에는 영향이 없고, 서버 키가 노출되어도 GitHub 접근 권한은 유지됩니다.
키를 잃어버리거나 노출했을 때
OpenSSH 매뉴얼은 passphrase를 잃어버리면 복구할 방법이 없고 새 키를 만들어 공개키를 다시 배포해야 한다고 설명합니다. 개인키가 노출된 경우도 마찬가지입니다. 노출된 키를 계속 쓰면 안 됩니다.
- 새 키를 생성합니다.
- 서버의
authorized_keys에 새 공개키를 추가합니다. - 새 키로 접속되는지 확인합니다.
- 기존 공개키를
authorized_keys, GitHub, 클라우드 콘솔에서 제거합니다. - 노출 경로가 Git 저장소라면 히스토리와 배포된 사본까지 확인합니다.
초보자 체크리스트
- 새 키는 가능하면
ssh-keygen -t ed25519로 만든다. - 개인키 파일은 절대 공유하지 않는다.
- 서버에는 공개키만
authorized_keys에 넣는다. - 개인키 권한은
chmod 600으로 제한한다. - 여러 서버를 쓰면
~/.ssh/config로 관리한다. - GitHub, 운영 서버, 실험 서버 키는 가능하면 분리한다.
- 키가 노출되면 수정이 아니라 교체한다.
출처와 검증
이 글은 OpenSSH 매뉴얼을 기준으로 SSH 키 관리 개념을 초보자용 운영 가이드로 재구성한 ActualStack 편집본입니다.