IT/작업기록

[SSH] 처음부터 설정하기 — 키 생성부터 접속까지

aram 2026. 8. 28. 16:52

지금까지 SSH로 서버에 접속하는 걸 전제로 여러 글을 썼는데, 정작 "SSH 자체를 처음 설정하는 법"은 따로 정리한 적이 없었다. 새 컴퓨터에서 처음 서버에 붙일 때, 또는 아예 SSH를 안 써봤을 때 필요한 것들을 처음부터 정리해둔다.

0. 사실 아무 설정 없이도 접속은 된다

여기부터가 진짜 기본이다 — 키를 만들거나 ~/.ssh/config를 준비하지 않아도, 그냥 한 줄로 바로 접속할 수 있다.

ssh <계정>@<서버IP> -p <포트번호>
  • config 파일이나 키 등록은 "이 정보를 매번 안 적어도 되게 줄여주는" 편의 기능일 뿐이지, 필수가 아니다. 딱 한 번만 들어가서 명령 몇 개 치고 나올 거라면 이 정도로 충분하다
  • 포트를 안 적으면 기본값 22번으로 접속을 시도한다. 서버가 22번이 아닌 다른 포트(보안을 위해 바꿔둔 포트 등)로 SSH를 열어뒀다면 -p로 명시해야 하고, 기본 22번 그대로라면 -p는 생략해도 된다
  • 서버에 키가 아직 등록되어 있지 않다면(공개키를 안 넣어둔 상태), 이 명령을 치면 비밀번호를 물어본다 — 서버가 비밀번호 로그인을 허용하는 경우에 한해서다

즉 아래 1~4단계(키 생성 → 서버에 공개키 등록 → 첫 접속 → config 설정)는 앞으로 이 서버에 자주 접속할 거라서 매번 비밀번호 치거나 긴 명령을 입력하기 귀찮을 때 해두는 준비 과정이다. 한 번 쓰고 말 접속이라면 이 단계들을 굳이 다 거칠 필요는 없다.

1. SSH 키 생성

SSH는 비밀번호 대신 **키 쌍(공개키 + 개인키)**으로 인증하는 게 일반적이다. 로컬 PC(접속하는 쪽)에서 키를 만든다.

ssh-keygen -t ed25519 -C "설명용 라벨(이메일 등)"
  • -t ed25519: 키 알고리즘 지정. ed25519가 최신이고 빠르고 안전해서 요즘 기본으로 권장된다 (예전엔 rsa가 흔했음)
  • -C: 키에 붙이는 라벨(코멘트). 나중에 여러 키를 관리할 때 "이게 뭐였더라" 헷갈리지 않게 이메일이나 용도를 적어두면 좋다

실행하면 몇 가지를 물어본다.

  • 저장 경로: 기본값(~/.ssh/id_ed25519)을 그대로 쓰거나, 용도별로 이름을 다르게 지정 가능 (예: ~/.ssh/id_ed25519_project1)
  • 패스프레이즈: 개인키 자체에 추가로 거는 비밀번호. 비워도 되지만(자동화 스크립트에 쓸 키라면 보통 비움), 사람이 직접 로그인용으로 쓰는 키라면 걸어두는 게 더 안전하다

완료되면 파일 두 개가 생긴다.

  • id_ed25519 (또는 지정한 이름): 개인키. 이건 로컬 PC 밖으로 절대 나가면 안 된다
  • id_ed25519.pub: 공개키. 접속하고 싶은 서버에 등록하는 파일

2. 서버에 공개키 등록

서버(접속받는 쪽)에 공개키를 등록해야 개인키로 로그인할 수 있다.

방법 1 — ssh-copy-id (가장 간단, 서버에 비밀번호 로그인이 아직 가능할 때)

ssh-copy-id 계정@서버주소

비밀번호를 한 번 입력하면, 로컬의 공개키를 서버의 ~/.ssh/authorized_keys에 자동으로 추가해준다.

방법 2 — 수동으로 붙여넣기

ssh-copy-id를 못 쓰는 환경(예: 클라우드 콘솔로만 접속 가능한 서버)이라면 직접 등록한다.

cat ~/.ssh/id_ed25519.pub

출력된 공개키 문자열 전체를 복사해서, 서버의 ~/.ssh/authorized_keys 파일 끝에 한 줄로 추가한다. 서버 관리 콘솔(NAS 관리자 페이지 등)에 공개키 등록 메뉴가 따로 있는 경우도 많다.

3. 첫 접속 — Host key 확인

키 등록 후 처음 접속하면 이런 메시지가 뜬다.

The authenticity of host '서버주소 (IP)' can't be established.
ED25519 key fingerprint is SHA256:....
Are you sure you want to continue connecting (yes/no)?

이건 "이 서버에 처음 접속하는데, 이 서버가 진짜 맞는지 확인 안 됐다"는 경고다. yes를 입력하면 그 서버의 지문(host key)이 로컬의 ~/.ssh/known_hosts 파일에 저장되고, 이후 접속부터는 이 확인 절차 없이 바로 연결된다.

ssh 계정@서버주소

정상 접속되면 설정이 끝난 것.

4. ~/.ssh/config로 접속 명령 줄이기

매번 ssh 계정@긴IP주소를 치는 게 번거롭다면, ~/.ssh/config에 별칭(Host)을 등록해둘 수 있다.

Host my-server
    HostName 서버주소또는IP
    User 계정
    IdentityFile ~/.ssh/id_ed25519

이렇게 등록하면 그다음부터는:

ssh my-server

만으로 접속된다. 여러 서버/프로젝트를 쓴다면 Host 블록을 여러 개 추가하면 된다.

Host server-a
    HostName 1.2.3.4
    User user1
    IdentityFile ~/.ssh/id_ed25519_a

Host server-b
    HostName example.com
    User user2
    IdentityFile ~/.ssh/id_ed25519_b

config 파일이 없다면 새로 만들면 되고(파일 확장자 없이 config라는 이름 그대로), 권한을 맞춰줘야 한다.

chmod 600 ~/.ssh/config

자주 나는 에러들

  • Permission denied (publickey): 공개키가 서버에 제대로 등록 안 됐거나, 로컬에서 엉뚱한 개인키를 쓰고 있는 경우. ssh -v 계정@서버주소로 상세 로그를 보면 어떤 키를 시도했는지 확인 가능
  • WARNING: UNPROTECTED PRIVATE KEY FILE!: 개인키 파일의 권한이 너무 열려 있어서 나는 경고. chmod 600 ~/.ssh/id_ed25519로 권한을 좁혀야 한다
  • Host key verification failed: 서버의 host key가 바뀐 경우(서버 재설치, IP 재사용 등)에 뜬다. 정말 그 서버가 맞다는 확신이 있으면 ~/.ssh/known_hosts에서 해당 줄을 지우고 다시 접속하면 새 지문으로 갱신된다

정리 — 전체 흐름

0. (한 번 쓰고 말 접속이면 여기서 끝) ssh 계정@서버IP -p 포트번호
      ↓ 자주 접속할 거라면 아래로
1. 로컬에서 키 생성 (ssh-keygen)
      ↓
2. 공개키(.pub)를 서버에 등록 (ssh-copy-id 또는 수동)
      ↓
3. 처음 접속 시 host key 확인(yes) → known_hosts에 저장
      ↓
4. (선택) ~/.ssh/config에 Host 별칭 등록 → 이후 짧은 명령으로 접속

이후 GitHub 같은 외부 서비스에 SSH로 연결하거나, 저장소별로 다른 키를 쓰고 싶을 때도 이 ~/.ssh/config의 Host 별칭 방식을 그대로 확장해서 쓰면 된다.