대상 OS: Debian 12 (bookworm)

SSH 설정 변경은 작은 실수로도 원격 접속을 잃는 사고로 이어질 수 있습니다. 그래서 Debian 12에서는 “편집 → 문법 검증 → 안전 적용 → 새 세션 재접속 확인” 순서를 습관화하는 것이 중요합니다. 이 글은 /etc/ssh/sshd_config 변경 후 안전하게 재시작/적용하는 실무 절차를 정리합니다.

0) 변경 전 원칙: 현재 세션 유지 + 새 세션으로 검증

  • 현재 SSH 세션은 절대 끊지 말고 유지
  • 별도 터미널/창에서 새로 접속 테스트(성공 확인 후 정리)
  • 가능하면 점검 창구에서 작업(콘솔 접근 경로가 있으면 더 안전)

1) 현재 sshd 동작값 확인(파일이 아니라 ‘런타임’ 기준)

설정 파일에 무엇이 적혀 있든, include/override로 인해 실제 적용값이 다를 수 있습니다.

1) 현재 sshd 런타임 설정 확인


sudo sshd -T | egrep -i 'port|permitrootlogin|passwordauthentication|kbdinteractiveauthentication|pubkeyauthentication|allowusers|allowgroups|x11forwarding|loglevel'

2) 현재 리스닝 포트/프로세스 확인


sudo ss -lntp | grep -E 'sshd|:22'

2) 안전한 편집: sudoedit 사용(권장)

sudoedit는 임시 파일로 편집 후 안전하게 반영해, 실수/권한 문제를 줄여줍니다.

1) 백업 생성


sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F_%H%M)

2) 설정 편집


sudoedit /etc/ssh/sshd_config

3) 흔히 적용하는 최소 보안 옵션(예시)


# 예시: 환경에 맞게 조정
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
X11Forwarding no
PermitEmptyPasswords no

# 운영 계정만 허용(조직 정책에 따라 AllowGroups를 더 권장하기도 함)
# AllowUsers ops deploy

3) 가장 중요한 단계: 문법/구성 검증(실패하면 적용 금지)

1) sshd_config 문법 검증


sudo sshd -t

2) 특정 파일을 대상으로 더 엄격히 확인하고 싶다면(-f)


sudo sshd -t -f /etc/ssh/sshd_config

주의: 검증이 실패하면 재시작/리로드하지 말고, 오류 라인을 수정한 뒤 다시 검증하세요.

4) 적용 방식 선택: reload vs restart

  • reload: 기존 연결을 유지한 채 설정을 재적용(가능하면 먼저 시도)
  • restart: sshd 프로세스를 재시작(잘못하면 새 연결이 막힐 수 있어 더 위험)

1) 먼저 reload 시도(권장)


sudo systemctl reload ssh
sudo systemctl status ssh --no-pager

2) reload가 불가능하거나 변경 사항이 반영되지 않는 경우에만 restart


sudo systemctl restart ssh
sudo systemctl status ssh --no-pager

5) 적용 후 검증: ‘새 세션’으로 재접속 테스트

1) 새 터미널에서 정상 접속 확인(키 기반)


# 클라이언트에서 실행
ssh -i ~/.ssh/id_ed25519 USER@SERVER_IP

2) 비밀번호 로그인이 차단되는지 확인(일부러 키 없이)


# 클라이언트에서 실행
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no USER@SERVER_IP

6) 문제 발생 시 즉시 복구(롤백) 절차

새 접속이 실패하거나 sshd가 뜨지 않으면, “현재 유지 중인 세션”에서 즉시 원복합니다.

1) 백업으로 롤백 후 재검증


# 현재 세션에서 실행
sudo cp -a /etc/ssh/sshd_config.bak.* /etc/ssh/sshd_config 2>/dev/null || true
sudo sshd -t
sudo systemctl restart ssh

2) 로그 확인(왜 실패했는지)


sudo journalctl -u ssh -n 200 --no-pager

7) 운영 팁: 변경 전후 체크리스트를 템플릿으로 고정

  • 변경 전: sshd -T, ss -lntp 기록
  • 변경 후: sshd -t 통과, systemctl reload ssh 성공
  • 필수: 새 세션 재접속 성공 확인
  • 로그: journalctl -u ssh로 오류/경고 확인

- 이 글은 ai가 random적으로 만들어 올리는 글입니다. -