SSH 보안 설정, 키 인증과 root 로그인 차단 순서

핵심 요약
  • 키 로그인이 성공하는 것을 확인한 뒤에만 비밀번호 로그인을 끈다.
  • 설정을 바꾸면 sshd -t로 문법을 검사하고, 기존 접속 창을 닫지 않은 채 새 창으로 접속을 시험한다.
  • fail2ban은 반복 실패한 IP를 일정 시간 차단하는 보조 수단이다.

서버에 원격으로 들어가는 SSH(Secure Shell, 암호화된 원격 접속 방식)는 인터넷에 열려 있으면 하루 종일 비밀번호 대입 시도를 받습니다. 서버 로그에 “Failed password”가 가득 쌓여 있다면 대부분 이런 자동 시도입니다. 비밀번호 대신 열쇠 파일(키)로 로그인하도록 바꾸면 이 경로를 크게 줄일 수 있습니다.

다만 SSH 설정은 한 번 잘못 바꾸면 내 서버에 내가 못 들어가게 될 수 있습니다. 이 글은 설정 항목보다 순서에 무게를 두었습니다. 설정 지시어는 sshd_config 매뉴얼 기준으로 확인했고, 명령은 Ubuntu Server 문서에 나온 형태를 따랐습니다. 방화벽 쪽 잠김 방지는 서버 방화벽 설정 글에서 따로 다룹니다.

시작 전에 준비할 안전장치

설정 파일을 만지기 전에 다음 세 가지를 먼저 갖춥니다.

  • 접속 창을 두 개 열어 둡니다. 하나는 설정 작업용, 하나는 비상용입니다. 설정을 바꿔 새로 접속이 안 되더라도 이미 열린 접속은 유지되는 경우가 많아 되돌릴 수 있습니다.
  • 비상 접속 수단을 확인합니다. 클라우드의 웹 콘솔, VNC 콘솔, 복구 모드처럼 SSH와 별개로 들어가는 길입니다.
  • 설정 파일을 복사해 둡니다. sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Ubuntu 문서도 원격 서버에서 sshd 설정을 만질 때 SSH가 유일한 접속 수단이면 실수로 잠길 수 있으니 조심하라고 경고합니다.

1단계 내 컴퓨터에서 키 만들고 서버에 등록

키는 짝으로 이루어집니다. 개인키는 내 컴퓨터에만 두고, 공개키를 서버에 올립니다. Ubuntu 문서에 나온 방식은 다음과 같습니다.

# 내 컴퓨터에서 실행
ssh-keygen -t ed25519
ssh-copy-id 사용자명@서버주소

서버의 ~/.ssh/authorized_keys 파일이 다른 사용자가 쓸 수 없는 상태여야 합니다. 문서는 chmod go-w .ssh/authorized_keys를 안내합니다. 개인키 파일은 메신저나 메일로 보내지 말고, 가능하면 암호(passphrase)를 걸어 둡니다.

등록이 끝나면 새 터미널 창에서 키로 접속해 봅니다. 이 접속이 성공해야 다음 단계로 넘어갑니다.

내 사이트의 HTTPS·인증서·보안 헤더를 바로 확인할 수 있습니다.

무료 보안 검사 시작

2단계 sshd_config 설정값

설정 파일은 /etc/ssh/sshd_config입니다. sshd_config 매뉴얼에서 확인한 항목과 기본값은 다음과 같습니다.

설정기본값의미
PasswordAuthenticationyes비밀번호 로그인 허용 여부
PubkeyAuthenticationyes공개키 로그인 허용 여부
PermitRootLoginprohibit-passwordroot 직접 로그인. no로 두면 완전 차단
MaxAuthTries6연결 한 번에 허용하는 인증 시도 횟수
AllowUsers모든 사용자 허용지정한 사용자만 로그인 허용
KbdInteractiveAuthenticationyes키보드 대화형 인증. 비밀번호 입력 경로로 쓰일 수 있음

적용하려는 값은 이렇습니다.

PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
MaxAuthTries 3
AllowUsers 내사용자명

주의할 점이 둘 있습니다. 매뉴얼에 따르면 같은 항목이 여러 번 나오면 처음 읽힌 값이 적용됩니다. Include로 다른 설정 파일을 불러오는 배포판에서는 앞쪽 파일의 값이 이길 수 있으니, 바꾼 뒤 실제 적용값을 확인합니다. PermitRootLogin의 기본값은 이미 키 로그인만 허용하는 prohibit-password이지만, 로그인 자체를 막으려면 no를 명시합니다. 또한 AllowUsers에 자기 계정을 빠뜨리면 바로 잠기므로 철자를 두 번 확인합니다.

3단계 검사하고 적용하고 새 창으로 확인

Ubuntu 문서는 수정 후 재시작 전에 sudo sshd -t로 설정을 검사하라고 안내합니다. 오류가 없으면 아무것도 출력되지 않습니다.

sudo sshd -t
sudo systemctl restart ssh.service

서비스 이름은 Ubuntu에서 ssh입니다. 다른 배포판은 sshd일 수 있어 확인이 필요합니다. 재시작한 뒤 기존 창은 닫지 말고 새 창에서 접속해 봅니다. 성공하면 완료, 실패하면 기존 창에서 .bak 파일로 되돌립니다. 비밀번호 로그인이 정말 막혔는지 보려면 ssh -o PubkeyAuthentication=no 사용자명@서버주소로 시도해 거절되는지 확인합니다.

4단계 fail2ban으로 반복 시도 차단

fail2ban은 로그를 읽어 실패를 반복한 IP를 한동안 차단하는 프로그램입니다. fail2ban 위키는 패키지 업데이트 때 덮어써질 수 있으니 jail.conf가 아닌 jail.local에 설정을 쓰라고 안내하고, 감옥(jail)은 기본적으로 모두 꺼져 있으므로 enabled = true를 직접 넣으라고 합니다.

# /etc/fail2ban/jail.local
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h

maxretry 횟수만큼 findtime 안에 실패하면 bantime 동안 차단됩니다. 위키는 maxretry 5, findtime 10분을 기본값으로 설명합니다. 값을 너무 빡빡하게 잡으면 정상 사용자가 막힐 수 있습니다. 적용과 확인은 다음과 같습니다.

sudo fail2ban-client reload
sudo fail2ban-client status sshd

잘못 차단된 IP는 sudo fail2ban-client unban 아이피주소로 풉니다. 키 로그인만 허용하는 서버에서는 fail2ban이 필수는 아니며 로그 소음과 부하를 줄이는 보조 수단입니다.

설정이 끝난 뒤 점검할 것

fail2ban의 예외 IP 설정, 포트 변경 시 SELinux 설정, 2단계 인증 모듈(PAM)은 이 글에서 직접 확인한 문서가 없어 다루지 않았습니다.

웹사이트 기본 보안 검사HTTPS·리디렉션·인증서·보안 헤더·서버 정보 노출 10개 항목을 무료로 확인할 수 있습니다.

무료 보안 검사 시작

자주 묻는 질문

비밀번호 로그인을 끄면 완전히 안전해지나요?

무차별 대입 공격으로 비밀번호를 맞히는 경로는 막힙니다. 하지만 개인키가 유출되거나 SSH 서버 프로그램 자체에 취약점이 있으면 위험이 남습니다. 서버 업데이트와 개인키 보관도 함께 관리해야 합니다.

SSH 포트를 22번에서 바꿔야 하나요?

포트 변경은 로그에 쌓이는 접속 시도를 줄이는 정도의 효과이고, 인증 방식 강화를 대신하지는 못합니다. 바꾼다면 방화벽과 클라우드 보안그룹에 새 포트를 먼저 열어 둔 뒤 적용해야 접속이 끊기지 않습니다.

설정을 잘못해서 접속이 안 될 때는 어떻게 하나요?

클라우드 업체의 웹 콘솔이나 VNC 콘솔, 복구 모드로 들어가 설정 파일을 되돌립니다. 그래서 설정을 바꾸기 전에 이런 비상 접속 수단이 있는지 먼저 확인해 두는 것이 좋습니다.

fail2ban이 내 IP를 차단하면 어떻게 풀죠?

서버에 다른 경로로 접속한 뒤 fail2ban-client unban 명령 뒤에 IP 주소를 붙여 해제합니다.

확인한 자료

기술 정보는 2026-10-24에 위 자료로 확인했습니다. 소프트웨어 버전·기본값·서비스 정책은 바뀔 수 있으므로 적용 전 각 문서의 최신 내용을 확인하세요. 이 글은 일반 정보이며 특정 서비스 가입을 권하지 않습니다.

Next
서버 보안

서버 방화벽 설정 ufw, 잠김 방지 순서와 보안그룹 관계

ufw로 서버 방화벽을 켜기 전에 SSH 허용부터 하는 순서, 규칙 확인과 삭제 명령, AWS 보안그룹과 서버 방화벽이 함께 동작하는 방식을 정리했습니다.

가이드 보기 →
서버 보안

리눅스 서버 보안 점검 체크리스트, 7단계 순서대로 확인

리눅스 서버 보안을 업데이트, 계정, SSH, 방화벽, 서비스, 로그, 백업 7단계로 나눠 점검하는 체크리스트입니다. 확인 명령과 개별 설정 글 링크를 함께 담았습니다.

가이드 보기 →
워드프레스 보안

워드프레스 로그인 보안, 2단계 인증과 관리자 계정 보호

워드프레스 로그인 보안 설정을 정리했습니다. 2단계 인증, 로그인 시도 제한, admin 계정명 문제, 권한 최소화, XML-RPC 처리까지 관리자 계정을 지키는 방법을 설명합니다.

가이드 보기 →
서버 보안

서버 백업 방법, 3-2-1 원칙과 파일 DB 자동 백업

서버 백업에서 3-2-1 원칙의 뜻, rsync로 파일 복사, mysqldump로 DB 덤프, cron 자동화와 복구 테스트 순서까지 소규모 홈페이지 관리자 기준으로 정리했습니다.

가이드 보기 →
서버 보안

서버 버전 정보 숨기기, Apache Nginx PHP

Apache ServerTokens·ServerSignature, Nginx server_tokens, PHP expose_php 설정으로 응답 헤더의 버전 노출을 줄이는 방법과 적용 후 curl 확인법, 이 설정의 한계를 정리했습니다.

가이드 보기 →