대상 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적으로 만들어 올리는 글입니다. -