서버 십수 대를 매일 들락거리다 보면 비밀번호를 매번 치는 것도 일이고, 사실 보안 측면에서도 좋은 선택이 아닙니다. 무차별 대입 공격은 비밀번호 인증을 노리거든요. 키 기반 인증으로 바꾸고 ssh-agent까지 켜놓으면 비밀번호도 안 치고 더 안전해집니다. 오늘은 그 셋업을 한 번에 정리해 보겠습니다.
개념 / 원리
SSH 키 인증은 비대칭키 암호를 씁니다. 두 개의 키가 한 쌍이에요.
- 공개키(public key): 서버에 등록하는 키. 외부에 노출돼도 됩니다.
- 개인키(private key): 내 PC에만 두는 키. 절대 유출되면 안 됩니다.
접속할 때 흐름은 대충 이렇습니다.
- 클라이언트가 서버에 "이 공개키로 접속할게" 신호.
- 서버는 무작위 데이터를 공개키로 암호화해서 보냄.
- 클라이언트는 개인키로 풀어서 응답.
- 응답이 맞으면 인증 성공.
ssh-agent는 개인키에 패스프레이즈가 걸려 있을 때, 매번 패스프레이즈를 묻지 않도록 키를 메모리에 풀어서 들고 있는 데몬입니다. 부팅 후 한 번만 풀어두면 이후 SSH 접속은 패스프레이즈 없이 됩니다.
실전 예제
1. 키 생성
요즘은 ed25519가 사실상 표준입니다. RSA보다 짧고 빠르며 안전해요.
ssh-keygen -t ed25519 -C "your_email@example.com"
저장 경로(~/.ssh/id_ed25519)와 패스프레이즈를 물어봅니다. 패스프레이즈는 꼭 거시는 걸 권장합니다. 개인키 파일이 유출돼도 한 단계 방어막이 됩니다.
생성되면 두 파일이 만들어집니다.
~/.ssh/id_ed25519(개인키, 권한 600)~/.ssh/id_ed25519.pub(공개키)
2. 서버에 공개키 등록
가장 편한 방법은 ssh-copy-id입니다.
ssh-copy-id user@server
수동으로 등록하려면 공개키 내용을 서버의 ~/.ssh/authorized_keys에 한 줄로 추가합니다.
cat ~/.ssh/id_ed25519.pub | ssh user@server \
"mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
3. ssh-agent에 키 등록
# agent가 안 떠 있으면 띄우기
eval "$(ssh-agent -s)"
# 키 등록 (패스프레이즈 한 번 입력)
ssh-add ~/.ssh/id_ed25519
# 등록된 키 확인
ssh-add -l
이제 같은 셸 세션에서는 패스프레이즈 없이 SSH가 됩니다.
4. ~/.ssh/config로 호스트 별칭 만들기
서버 정보를 매번 외울 필요 없이 별칭으로 관리할 수 있습니다.
Host prod-web
HostName 10.0.1.20
User deploy
IdentityFile ~/.ssh/id_ed25519
Port 22
Host bastion
HostName bastion.example.com
User admin
# 배스천을 거쳐 들어가야 하는 내부 서버
Host db-internal
HostName 10.0.2.50
User dba
ProxyJump bastion
이제 ssh prod-web 한 줄로 접속됩니다.
주의할 점
이 영역에서 흔히 만나는 함정들입니다.
첫째, 권한이 안 맞으면 SSH가 키를 그냥 무시합니다. 다음 권한이 필수입니다.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/authorized_keys
권한이 너무 열려 있으면 SSH 데몬이 보안상 위험하다고 판단해 키 인증을 거부합니다. ssh -v로 디버그 로그 보면 "Permissions ... are too open" 메시지가 찍혀요. 저는 신입 때 이걸 모르고 키가 등록되어 있는데도 비밀번호 인증으로 빠지는 걸 한 시간 동안 디버깅한 적이 있습니다.
둘째, agent forwarding(-A)은 신중하게. 점프 호스트에서 다른 서버로 갈 때 편하지만, 점프 호스트가 뚫리면 거기 떠 있는 다른 사용자가 내 키를 빌려 쓸 수 있습니다. 점프 호스트 신뢰가 확실하지 않다면 ProxyJump(ssh -J)를 쓰는 게 더 안전합니다.
셋째, RSA를 쓴다면 2048비트 이상, 더 좋게는 ed25519로 새로 만드세요. 1024비트는 이미 안전하지 않습니다.
넷째, 키 인증이 잘 되면 서버 측 /etc/ssh/sshd_config에서 PasswordAuthentication no로 비밀번호 인증을 꺼두는 걸 추천합니다. 무차별 대입의 표면 자체를 없앨 수 있습니다. 단, 키를 잃어버리면 들어갈 수 없으니 백업 수단(콘솔, 다른 키)을 꼭 마련해 두세요.
마무리
정리하면 세 줄입니다.
- 비대칭키로 인증, 공개키는 서버
authorized_keys에, 개인키는 내 PC에만. ssh-agent로 패스프레이즈는 세션당 한 번만,~/.ssh/config로 별칭 관리.- 권한 600/700 꼭 맞추고, 키 인증 검증 후 비밀번호 인증은 꺼두기.
'IT·리눅스 > 리눅스' 카테고리의 다른 글
| 디스크 I/O 모니터링 - iostat과 iotop으로 병목 잡기 (0) | 2026.06.16 |
|---|---|
| /proc 파일시스템 탐험 - 리눅스 내부 상태 들여다보기 (0) | 2026.06.12 |
| top, htop, ps - 리눅스 모니터링 세 가지 도구 제대로 쓰기 (0) | 2026.06.08 |
| cron vs systemd timer - 정기 작업, 어느 쪽을 써야 하나 (0) | 2026.06.04 |
| 파일 디스크립터와 ulimit - \"Too many open files\" 정체 (0) | 2026.05.29 |