SSH 키 설정 우분투 — 비번 없이 안전하게
원격 서버에 접속할 때마다 비밀번호 치기 — 번거롭고, 사실 안전하지도 않습니다. 키쌍 한 번 만들면 비번 없이, 그리고 더 안전하게.
17편에서 ufw로 "22번 포트(SSH)를 연다"고 했죠. SSH는 다른 컴퓨터에 안전하게 원격 접속하는 도구입니다 — 클라우드 서버, 집의 다른 PC, 라즈베리파이… 명령줄로 들어가는 거의 모든 게 SSH예요. 그런데 접속할 때마다 비밀번호를 치는 건 (a) 귀찮고 (b) 무차별 대입 공격에 약합니다(인터넷에 노출된 서버는 1초에도 수십 번 "비번 맞히기" 시도를 받아요).
해답이 SSH 키입니다 — 키쌍(공개키 + 개인키)을 한 번 만들어두고, 공개키를 서버에 등록해두면, 그 다음부터는 비번 없이·자동으로·훨씬 안전하게 들어갑니다. 이번 편은 그 키를 만들고(ssh-keygen), 서버에 심고(ssh-copy-id), 편하게 쓰는 법(~/.ssh/config)까지. 26편 입문 시리즈 18편, "중급" 묶음. ⚠️ 핵심 규칙 하나만 미리 — 개인키(id_ed25519, 확장자 없는 것)는 절대, 어디에도 공유하지 마세요. 서버에 올리는 건 항상 .pub(공개키)뿐입니다.
chmod)·17편(ufw·22번 포트)을 봤다면 이어집니다.
왜 키가 비번보다 나은가
비밀번호 인증과 키 인증의 차이:
| 비밀번호 인증 / 키 인증 | |
|---|---|
| 작동 | 비번: 매번 비밀번호를 타이핑해 보냄. 키: 서버가 "이 공개키 가진 사람이 맞는지" 수학적으로 확인 — 비밀은 네트워크로 안 보냄. |
| 공격에 | 비번: 무차별 대입(흔한 비번·사전 단어)에 약함. 인터넷 서버는 끊임없이 시도받음. 키: 사실상 추측 불가(천문학적 경우의 수). |
| 편의 | 비번: 매번 입력. 키: 한 번 설정하면 자동(개인키에 패스프레이즈를 걸어두면 그것만 가끔 — ssh-agent가 기억). |
"키쌍"의 개념: 개인키(private key)는 내 컴퓨터에만 두는 비밀(~/.ssh/id_ed25519) — 자물쇠를 여는 진짜 열쇠. 공개키(public key)는 누구한테 줘도 되는 짝(~/.ssh/id_ed25519.pub) — 자물쇠 자체. 서버에 "이 자물쇠(공개키)를 달아둬"라고 등록해두면, 내 열쇠(개인키)로만 열립니다. 그래서 공개키는 서버·깃허브 등에 마음껏 등록, 개인키는 절대 밖으로 안 나감 — 이 비대칭이 핵심이에요.
키 만들기 — ssh-keygen과 권한
~/.ssh/id_ed25519(확장자 없는 것)는 이메일에 첨부하지도, 깃에 커밋하지도, 채팅에 붙여넣지도, USB로 옮기지도 마세요(다른 기기에서 쓰려면 그 기기에서 새 키를 만드는 게 정석). 유출되면 그 키로 등록된 모든 서버가 뚫립니다 — 그래서 패스프레이즈를 거는 거고요(한 겹 더). 그리고 권한이 너무 느슨하면 ssh 가 작동을 거부합니다("UNPROTECTED PRIVATE KEY FILE" 에러): ~/.ssh는 700, 개인키는 600. chmod 777 ~/.ssh 같은 건 절대 금지(15편의 그 함정 — 너무 열어도 거부).서버에 등록·접속 — ssh-copy-id와 ssh
만든 공개키를 서버의 ~/.ssh/authorized_keys에 추가하면 — 그 서버는 "이 사람 맞다" 합니다. 한 줄로:
참고로 깃허브/깃랩에 푸시할 때 쓰는 SSH 키도 똑같습니다 — 그쪽 설정의 "SSH keys"에 id_ed25519.pub 내용을 붙여넣으면, 그 다음부터 비번 없이 push/pull. 한 개인키로 여러 서버·서비스에 쓸 수 있어요(공개키만 각각 등록).
편하게 쓰기 — ~/.ssh/config, 그리고 서버 굳히기
접속할 서버가 늘면 ssh [email protected] -p 22 -i ~/.ssh/...를 매번 치기 귀찮죠. ~/.ssh/config에 별칭을 정해두면:
/etc/ssh/sshd_config에서 PasswordAuthentication no(키로만 접속 허용)·PermitRootLogin no로 바꾸고 sudo systemctl restart ssh(19편). 하지만 — 키 접속이 확실히 되는 걸 먼저 확인하고, 그 설정 파일은 8편처럼 백업(sudo cp ... .bak)한 다음에 하세요. 키가 제대로 안 됐는데 비번 로그인을 꺼버리면 — 그 서버에 영영 못 들어갑니다(콘솔 접속이 가능한 클라우드면 복구되지만, 아니면 큰일). 그리고 17편 ufw의 limit 22/tcp도 같이 걸어두면 무차별 대입을 더 막아줍니다.~/.ssh/id_ed25519, 절대 공유 X, 권한 600)+ 공개키(.pub, 서버에 등록 OK). 만들기: ssh-keygen -t ed25519 -C "메모"(패스프레이즈 걸기). 권한: ~/.ssh=700, 개인키=600(안 그럼 ssh 거부). 등록: ssh-copy-id user@서버 → ssh user@서버(비번 없이). 편하게: ~/.ssh/config에 Host 별칭 / HostName / User / Port / IdentityFile. 굳히기(신중히, 키 확인+백업 후): sshd_config의 PasswordAuthentication no·PermitRootLogin no + ufw limit 22.시리즈 흐름
- 1~15편 입문·기초·중급 ✔ 16편 네트워크 ✔ 17편 ufw 방화벽 ✔
- 18편 — SSH 키 설정 (이 글) ✔
- 19편 — systemd 서비스 만들기 (프로그램을 부팅 시 자동 시작·재시작 —
systemctl·journalctl) - 20편~ — cron / 셸 스크립트 / 셸 스크립트 베스트 프랙티스 …
오늘 할 일: ssh-keygen -t ed25519 -C "내노트북"으로 키를 하나 만들고(패스프레이즈 걸기), ls -l ~/.ssh/로 권한(개인키 600) 확인하고, cat ~/.ssh/id_ed25519.pub으로 공개키가 어떻게 생겼는지 보세요. 접속할 서버가 있으면 ssh-copy-id까지, 없으면 깃허브 SSH 키에 등록해보는 것도 좋습니다(git push가 비번 안 묻게 됨). 19편에서 만나요. (SSH 전체는 man ssh·man ssh_config, 또는 우분투 OpenSSH 문서.)