/엔지니어/보안 설정/SSH 설정·접근 제어 완전 가이드 — sshd_c
보안 설정중급ubuntudebiancentossshsshd_config보안

SSH 설정·접근 제어 완전 가이드 — sshd_config 하드닝과 키 인증

sshd_config 하드닝, 키 기반 인증 전환, AllowGroups·Match 블록·MFA까지 SSH 접근을 제어하는 방법을 정리합니다. 무차별 대입 자동 차단(fail2ban)은 별도 가이드에서 다룹니다.

SSH 보안의 출발점 — 현재 설정 점검

SSH 서버의 기본값은 편의성 위주라 공격 표면이 넓습니다. 손대기 전에 실제 적용 중인 값부터 확인합니다.

Bash
sudo sshd -T | grep -Ei "permitrootlogin|passwordauthentication|^port|maxauthtries|allowusers|allowgroups"

이 가이드는 sshd_config 하드닝과 접근 제어에 집중합니다. 무차별 대입(brute-force) 자동 차단·IP 밴은 fail2ban으로 SSH 무차별 대입 차단 가이드를 함께 적용하세요.


/etc/ssh/sshd_config 핵심 하드닝

Bash
# 포트 변경 (기본 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 — 잘못된 설정으로 잠기는 사고를 막습니다.

Bash
sudo sshd -t && sudo systemctl reload ssh   # 데비안/우분투: ssh, RHEL계열: sshd

잠금 방지: 설정을 바꾸는 동안 기존 SSH 세션을 하나 더 열어 두세요. 새 세션으로 접속이 확인되기 전에는 기존 세션을 닫지 않습니다.


SSH 키 기반 인증 설정

클라이언트 측 (내 PC) — Ed25519 키 권장(짧고 빠르며 안전).

Bash
ssh-keygen -t ed25519 -C "deploy@myserver" -f ~/.ssh/myserver_ed25519
cat ~/.ssh/myserver_ed25519.pub

서버 측 — 공개키만 등록(개인키는 절대 서버로 옮기지 않음).

Bash
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "ssh-ed25519 AAAA... deploy@myserver" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

ssh-copy-id를 쓰면 위 과정을 한 줄로 처리할 수 있습니다.

Bash
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에 나열하기보다 그룹 기반으로 관리하면 운영이 단순해집니다.

Bash
# SSH 허용 그룹 생성 후 사용자 편입
sudo groupadd sshusers
sudo usermod -aG sshusers deploy
Bash
# sshd_config
AllowGroups sshusers

Match 블록으로 조건별 정책을 분리할 수 있습니다. 예: 배포 계정은 키 인증만, 특정 대역만 접속 허용.

Bash
# 특정 사용자에게 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 등)를 추가합니다.

Bash
sudo apt install libpam-google-authenticator
google-authenticator   # 대화형: QR 스캔 후 비상 코드 저장
Bash
# /etc/pam.d/sshd 상단에 추가
auth required pam_google_authenticator.so

# /etc/ssh/sshd_config
KbdInteractiveAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

이제 키 + OTP 두 가지를 모두 통과해야 로그인됩니다.


UFW로 SSH 포트만 노출

Bash
sudo ufw allow 2222/tcp
sudo ufw enable
sudo ufw status verbose

다음 단계: 자동 차단까지 갖추려면 fail2ban으로 SSH 무차별 대입 차단을, 새 서버 전체 초기 점검은 신규 Linux 서버 초기 보안 설정 체크리스트를 참고하세요.

#ssh#sshd_config#보안#서버#키인증#접근제어#mfa
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.