sshd_config 파일 분석 가이드

OpenSSH sshd_config 주요 옵션을 운영 관점으로 분석합니다. 설정 예시, 안전한 변경 순서, sshd -t 검증, 공개키 권한과 문제 해결 명령을 정리했습니다.

sshd_config는 OpenSSH 서버 데몬인 sshd의 동작을 결정하는 핵심 설정 파일입니다. 실습은 주요 옵션을 나열하는 형태였지만, 실제 운영에서는 옵션의 의미뿐 아니라 적용 순서, 검증 명령, 접속 차단을 피하는 방법까지 같이 알아야 합니다. OpenSSH 매뉴얼 기준으로 sshd는 설정 파일의 keyword-argument 쌍을 읽고, 빈 줄과 # 주석을 무시합니다. 같은 옵션이 여러 번 등장하면 일반적으로 먼저 얻은 값이 적용된다는 점도 중요합니다.

주요 파일

파일 역할
/etc/ssh/sshd_config OpenSSH 서버 전역 설정
/etc/ssh/sshd_config.d/*.conf 배포판에 따라 include되는 분리 설정
~/.ssh/authorized_keys 사용자별 공개키 인증 파일
/etc/ssh/ssh_host_*_key 서버 호스트키

예시 설정

Port 22
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 2m

PermitRootLogin no
StrictModes yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
PermitEmptyPasswords no
KbdInteractiveAuthentication no

X11Forwarding no
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes

옵션별 해석

옵션 의미 운영 판단
Port sshd가 listen할 TCP 포트 변경 시 방화벽, 보안그룹, 접속 스크립트도 같이 바꿉니다.
ListenAddress 접속을 받을 로컬 IP 관리망 IP로 제한하면 노출 범위를 줄일 수 있습니다.
PermitRootLogin root SSH 로그인 허용 여부 운영 서버는 보통 no 또는 제한된 키 기반 정책을 사용합니다.
PubkeyAuthentication 공개키 인증 사용 권장됩니다. authorized_keys 권한도 같이 확인해야 합니다.
PasswordAuthentication 비밀번호 로그인 사용 공개 서버라면 끄는 것을 검토합니다. 끄기 전 키 로그인이 되는지 먼저 확인합니다.
KbdInteractiveAuthentication PAM 기반 대화형 인증 OTP 사용 시 필요할 수 있습니다. 구버전은 ChallengeResponseAuthentication 이름을 사용합니다.
UsePAM PAM 모듈 사용 계정 정책, OTP, 세션 제한과 연결됩니다.
X11Forwarding X11 GUI forwarding 필요 없으면 끄는 편이 안전합니다.

안전한 변경 순서

# 현재 설정 백업
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%Y%m%d-%H%M%S)

# 문법 검증
sudo sshd -t

# sshd가 해석한 최종 설정 확인
sudo sshd -T | egrep '^(port|listenaddress|permitrootlogin|pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication|usepam|x11forwarding)\\b'

설정 변경 후에는 기존 SSH 세션을 닫지 않은 상태에서 새 터미널로 새 접속을 테스트합니다.

sudo systemctl reload sshd || sudo systemctl reload ssh

# 다른 터미널에서 테스트
ssh -vvv user@server.example.com

공개키 인증 권한 확인

ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

StrictModes yes일 때 홈 디렉터리나 .ssh 권한이 너무 열려 있으면 공개키 인증이 실패할 수 있습니다.

운영에서 자주 쓰는 정책 예시

공개키만 허용

PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
PermitRootLogin no

관리망 IP에만 listen

ListenAddress 10.10.10.20
AddressFamily inet

SFTP만 허용하는 계정 분리 예시

Match Group sftp-only
 ChrootDirectory /data/sftp/%u
 ForceCommand internal-sftp
 AllowTcpForwarding no
 X11Forwarding no

문제 해결

# 서버 로그
sudo journalctl -u sshd --since "30 minutes ago" --no-pager
sudo journalctl -u ssh --since "30 minutes ago" --no-pager

# 포트 listen 확인
ss -tnlp | grep ssh

# 방화벽 확인
sudo firewall-cmd --list-all 2>/dev/null || true
sudo ufw status 2>/dev/null || true

SSH 설정을 바꾸는 작업은 접속 차단으로 이어질 수 있으므로 항상 백업, sshd -t, 기존 세션 유지, 새 세션 검증 순서를 지킵니다. 문서 링크: OpenSSH sshd_config manual

BGM EVER