SSH 보안의 출발점 — 현재 설정 점검
SSH 서버의 기본값은 편의성 위주라 공격 표면이 넓습니다. 손대기 전에 실제 적용 중인 값부터 확인합니다.
sudo sshd -T | grep -Ei "permitrootlogin|passwordauthentication|^port|maxauthtries|allowusers|allowgroups"이 가이드는 sshd_config 하드닝과 접근 제어에 집중합니다. 무차별 대입(brute-force) 자동 차단·IP 밴은 fail2ban으로 SSH 무차별 대입 차단 가이드를 함께 적용하세요.
/etc/ssh/sshd_config 핵심 하드닝
# 포트 변경 (기본 22 → 사용자 지정, 자동 스캔 노이즈 감소)
Port 2222
# root 직접 로그인 차단
PermitRootLogin no
# 패스워드 인증 비활성화 (키 설정 완료 후 적용)
PasswordAuthentication no
KbdInteractiveAuthentication no # 구버전: ChallengeResponseAuthentication no
# 빈 패스워드 금지
PermitEmptyPasswords no
# 인증 시도 횟수 / 로그인 유예 시간
MaxAuthTries 3
LoginGraceTime 20
# 유휴 세션 자동 종료 (5분 무응답 시 끊기)
ClientAliveInterval 300
ClientAliveCountMax 0
# 불필요한 기능 비활성화
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding no적용 전 반드시 문법 검증 후 reload — 잘못된 설정으로 잠기는 사고를 막습니다.
sudo sshd -t && sudo systemctl reload ssh # 데비안/우분투: ssh, RHEL계열: sshd잠금 방지: 설정을 바꾸는 동안 기존 SSH 세션을 하나 더 열어 두세요. 새 세션으로 접속이 확인되기 전에는 기존 세션을 닫지 않습니다.
SSH 키 기반 인증 설정
클라이언트 측 (내 PC) — Ed25519 키 권장(짧고 빠르며 안전).
ssh-keygen -t ed25519 -C "deploy@myserver" -f ~/.ssh/myserver_ed25519
cat ~/.ssh/myserver_ed25519.pub서버 측 — 공개키만 등록(개인키는 절대 서버로 옮기지 않음).
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "ssh-ed25519 AAAA... deploy@myserver" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keysssh-copy-id를 쓰면 위 과정을 한 줄로 처리할 수 있습니다.
ssh-copy-id -i ~/.ssh/myserver_ed25519.pub -p 2222 deploy@server-ip
ssh -i ~/.ssh/myserver_ed25519 -p 2222 deploy@server-ip # 키 접속 확인키 접속이 확인된 다음에 위 sshd_config의 PasswordAuthentication no를 적용합니다.
접근 제어 심화 — AllowGroups · Match 블록
사용자를 일일이 AllowUsers에 나열하기보다 그룹 기반으로 관리하면 운영이 단순해집니다.
# SSH 허용 그룹 생성 후 사용자 편입
sudo groupadd sshusers
sudo usermod -aG sshusers deploy# sshd_config
AllowGroups sshusersMatch 블록으로 조건별 정책을 분리할 수 있습니다. 예: 배포 계정은 키 인증만, 특정 대역만 접속 허용.
# 특정 사용자에게 SFTP 전용·chroot 적용
Match User backup
ForceCommand internal-sftp
ChrootDirectory /srv/backup
AllowTcpForwarding no
# 내부망에서만 패스워드 허용 (예외 정책)
Match Address 10.0.0.0/8
PasswordAuthentication yes다단계 인증(MFA) — 키 + TOTP
키가 유출돼도 한 단계 더 막으려면 TOTP(구글 OTP 등)를 추가합니다.
sudo apt install libpam-google-authenticator
google-authenticator # 대화형: QR 스캔 후 비상 코드 저장# /etc/pam.d/sshd 상단에 추가
auth required pam_google_authenticator.so
# /etc/ssh/sshd_config
KbdInteractiveAuthentication yes
AuthenticationMethods publickey,keyboard-interactive이제 키 + OTP 두 가지를 모두 통과해야 로그인됩니다.
UFW로 SSH 포트만 노출
sudo ufw allow 2222/tcp
sudo ufw enable
sudo ufw status verbose다음 단계: 자동 차단까지 갖추려면 fail2ban으로 SSH 무차별 대입 차단을, 새 서버 전체 초기 점검은 신규 Linux 서버 초기 보안 설정 체크리스트를 참고하세요.
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.