SSH 키 인증 설정 방법 (ssh-keygen, authorized_keys, 비밀번호 로그인 끄기)
서버에 접속할 때마다 비밀번호를 입력하고 있다면, 이제 키로 바꿀 때다. SSH 키 인증 방식은 비밀번호 대신 한 쌍의 암호 키로 로그인하는 방법으로, 더 안전하고 매번 비밀번호를 칠 필요도 없다. 이 글에서는 키 만들기, 서버에 등록하기, 접속 설정, 비밀번호 로그인 끄기까지 순서대로 정리한다. 접속 자체가 안 된다면 SSH 접속 안될 때 확인할 것부터 보자.

SSH 키 인증 원리
키는 개인키와 공개키 두 개가 한 쌍이다. 공개키는 이름처럼 서버에 올려 두어도 되는 자물쇠이고, 개인키는 내 컴퓨터에만 두는 열쇠다. 접속할 때 서버는 공개키로 확인할 수 있는 문제를 내고, 내 컴퓨터는 개인키로 답을 만들어 보낸다. 개인키 자체는 네트워크로 전송되지 않는다.
| 구분 | 파일(ed25519 기준) | 위치 | 공유 |
|---|---|---|---|
| 개인키 | id_ed25519 | 내 컴퓨터 ~/.ssh/ | 절대 공유 금지 |
| 공개키 | id_ed25519.pub | 서버 ~/.ssh/authorized_keys에 등록 | 공유해도 됨 |
비밀번호보다 나은 점
- 무차별 대입 공격(비밀번호 맞히기)에 사실상 뚫리지 않는다.
- 비밀번호 입력 없이 접속할 수 있어 rsync 백업이나 crontab 같은 자동화에 필수다.
- 키마다 서버 접근을 따로 관리하고, 필요 없어진 키만 지울 수 있다.
1단계: ssh-keygen으로 키 만들기
내 컴퓨터(접속하는 쪽)에서 실행한다. 지금은 짧고 빠르면서 안전한 ed25519 방식을 권장한다. 아주 오래된 서버와 연결해야 한다면 RSA 4096비트를 쓴다.
# 권장: ed25519
ssh-keygen -t ed25519 -C "my-laptop"
# 오래된 서버 호환이 필요할 때
ssh-keygen -t rsa -b 4096 -C "my-laptop"저장 위치를 물으면 엔터를 눌러 기본값(~/.ssh/id_ed25519)을 쓰면 된다. 이어서 패스프레이즈(키 비밀번호)를 묻는다. 개인키 파일이 유출되어도 바로 쓰이지 않도록 사람이 쓰는 키에는 패스프레이즈를 거는 것을 권한다. 자동화 전용 키는 비워 두는 경우가 많은데, 그 키는 용도를 좁게 제한하는 것이 좋다.
ls -l ~/.ssh/
# id_ed25519 개인키
# id_ed25519.pub 공개키윈도우에서 키 만들기
윈도우 10(1809) 이후에는 OpenSSH 클라이언트가 기본으로 들어 있어 PowerShell에서 같은 ssh-keygen 명령을 쓸 수 있다. 키는 C:\Users\사용자명\.ssh\ 아래에 만들어진다. 자세한 내용은 Microsoft OpenSSH 안내를 참고하자.
2단계: 서버에 공개키 등록하기
가장 쉬운 방법은 ssh-copy-id다. 아직 비밀번호로 접속할 수 있는 상태에서 한 번만 실행하면, 공개키를 서버의 ~/.ssh/authorized_keys에 알아서 추가하고 권한도 맞춰 준다.
ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@192.168.0.20
# SSH 포트를 바꿨다면
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 admin@192.168.0.20포트 변경 방법은 SSH 포트 변경 방법에 정리해 두었다.
ssh-copy-id가 없을 때 직접 등록하기
윈도우처럼 ssh-copy-id가 없는 환경에서는 공개키 내용을 직접 붙여 넣는다.
cat ~/.ssh/id_ed25519.pub | ssh admin@192.168.0.20 \
"mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"SSH 키 인증 권한 설정이 가장 중요하다
키를 등록했는데도 계속 비밀번호를 묻는다면 십중팔구 권한 문제다. sshd는 다른 사람이 수정할 수 있는 위치의 키를 믿지 않고 조용히 무시한다.
| 경로 | 권한 | 명령 |
|---|---|---|
| ~/.ssh | 700 | chmod 700 ~/.ssh |
| ~/.ssh/authorized_keys | 600 | chmod 600 ~/.ssh/authorized_keys |
| 개인키(내 컴퓨터) | 600 | chmod 600 ~/.ssh/id_ed25519 |
| 홈 디렉터리 | 그룹·기타 쓰기 금지 | chmod go-w ~ |
소유자도 해당 사용자여야 한다. root로 파일을 만들었다면 chown으로 바꿔 주자. 권한 개념은 리눅스 파일 권한(chmod, chown)에 자세히 정리했다.
3단계: 접속 확인과 ~/.ssh/config 설정
ssh -i ~/.ssh/id_ed25519 admin@192.168.0.20비밀번호 없이(또는 패스프레이즈만 묻고) 접속되면 성공이다. 서버가 여러 대라면 ~/.ssh/config에 별칭을 만들어 두면 훨씬 편하다.
# ~/.ssh/config
Host web1
HostName 192.168.0.20
User admin
Port 2222
IdentityFile ~/.ssh/id_ed25519
# 이제 이렇게만 입력하면 된다
ssh web1
rsync -avz /backup/ web1:/backup/패스프레이즈를 매번 입력하기 번거롭다면
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519ssh-agent에 키를 한 번 올려 두면 그 세션 동안에는 패스프레이즈를 다시 묻지 않는다. 아이패드에서도 같은 방식으로 키를 쓸 수 있는데, 앱별 설정은 아이패드 SSH 접속 방법에 있다.
4단계: 비밀번호 로그인 끄기
키 접속이 확인되면 비밀번호 로그인을 꺼서 무차별 대입 공격의 문을 닫는다. 반드시 지금 접속한 세션은 그대로 둔 채, 새 터미널에서 키 접속이 되는지 확인한 뒤 진행하자. 설정을 잘못하면 서버에 아예 들어갈 수 없게 된다.
sudo vi /etc/ssh/sshd_config
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-passwordUbuntu 22.04 이후나 클라우드 이미지에서는 /etc/ssh/sshd_config.d/ 아래 파일(예: 50-cloud-init.conf)에 PasswordAuthentication yes가 따로 들어 있어 위 설정을 덮어쓰는 경우가 있다. 함께 확인하자.
grep -ri passwordauthentication /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
# 문법 검사 후 재시작
sudo sshd -t
sudo systemctl restart ssh # Ubuntu / Debian
sudo systemctl restart sshd # Rocky / RHEL 계열방화벽까지 함께 정리하고 싶다면 리눅스 방화벽 설정 방법도 참고하자.
키 인증을 마쳤다면 다음 단계로 무차별 대입 공격 자체를 자동으로 막아 두자. 설치와 설정 방법은 fail2ban 설정으로 SSH 공격 막기에 정리했다.
SSH 키 인증 안될 때 확인할 것
- 자세한 로그 보기: ssh -v 옵션으로 어떤 키를 시도하고 왜 거부되는지 확인한다.
- 서버 로그: Ubuntu는 /var/log/auth.log, RHEL 계열은 /var/log/secure, 또는 journalctl -u ssh로 본다. 사용법은 journalctl 사용법에 있다.
- 권한: 위 권한 표대로 되어 있는지 다시 확인한다. “Authentication refused: bad ownership or modes”가 보이면 권한 문제다.
- 키 파일 지정: 기본 이름이 아닌 키라면 -i나 config의 IdentityFile로 지정해야 한다.
- 공개키 줄바꿈: authorized_keys에 붙여 넣을 때 한 키가 여러 줄로 쪼개지지 않았는지 본다.
ssh -v web1 2>&1 | grep -iE "offering|accepted|denied|refused"같은 키를 GitHub에 등록하면 비밀번호 없이 push할 수 있다. 방법은 Git 사용법 기초에 있다. 새 서버에서 SSH 보안까지 한 번에 정리하고 싶다면 리눅스 서버 초기 세팅 체크리스트를 순서대로 따라가 보자.
SSH 키 인증 설정 정리
SSH 키 인증 설정은 키 만들기, 공개키 등록, 권한 맞추기, 비밀번호 로그인 끄기의 네 단계면 끝난다. 한 번 해 두면 접속이 편해지는 것은 물론, 자동 백업 같은 작업을 안전하게 돌릴 수 있는 기반이 된다. 개인키는 절대 다른 사람과 공유하지 말고, 쓰지 않는 키는 authorized_keys에서 바로 지우는 습관을 들이자. 옵션 전체는 ssh-keygen 공식 매뉴얼에서 볼 수 있다.
첫 댓글을 남겨보세요