대상 OS: Ubuntu 24.04
SSH는 리눅스 서버의 “정문”입니다. 정문을 단단히 해두면 무차별 대입, 계정 탈취, 설정 실수로 인한 침입 가능성을 크게 줄일 수 있습니다. 이 글은 키 로그인 강제, root 로그인 차단, 허용 사용자 제한을 중심으로, 운영에서 안전하게 적용하는 절차를 정리합니다.
0) 적용 전 원칙: “현재 세션을 끊지 말고” 2중 검증
sshd 설정을 잘못 건드리면 원격 접속이 막힐 수 있습니다. 반드시 현재 SSH 세션은 유지한 채로, 새 터미널에서 접속 테스트를 병행하세요.
1) 키 기반 로그인 준비(서버에 공개키 설치)
1) 클라이언트에서 키가 없다면 생성
# 클라이언트 PC에서 실행
ssh-keygen -t ed25519 -C "ops@mycompany" -f ~/.ssh/id_ed25519
2) 공개키를 서버로 복사
# 클라이언트 PC에서 실행
ssh-copy-id -i ~/.ssh/id_ed25519.pub ops@SERVER_IP
3) 서버에서 권한 확인(권한이 틀리면 키 인증이 실패할 수 있음)
# 서버에서 실행
sudo -iu ops
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys
2) sshd_config에서 핵심 옵션 적용
Ubuntu 24.04는 OpenSSH를 사용합니다. 설정 파일은 보통 /etc/ssh/sshd_config 입니다(또는 include 디렉터리 사용).
1) 현재 적용값 확인(실제 런타임 기준)
sudo sshd -T | egrep -i 'port|permitrootlogin|passwordauthentication|pubkeyauthentication|allowusers|allowgroups|kexalgorithms|ciphers|macs'
2) 설정 파일 편집(예시)
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)
sudo nano /etc/ssh/sshd_config
3) 아래 항목을 정책에 맞게 설정
# 1) 루트 로그인 차단
PermitRootLogin no
# 2) 키 인증 허용(기본적으로 켜져 있으나 명시)
PubkeyAuthentication yes
# 3) 비밀번호 인증 차단(키 기반 강제)
PasswordAuthentication no
KbdInteractiveAuthentication no
# 4) 허용 사용자 제한(운영 계정만)
AllowUsers ops deploy
# 5) 불필요한 기능 제한(원격 포워딩 정책은 환경에 맞춰 결정)
X11Forwarding no
PermitEmptyPasswords no
3) 설정 검증 후 “재시작”이 아니라 “reload”로 먼저 적용
1) 문법 검사(중요)
sudo sshd -t
2) 서비스 상태 확인 및 reload
sudo systemctl reload ssh
sudo systemctl status ssh --no-pager
4) 새 터미널에서 접속 테스트(실패 시 즉시 롤백)
1) 키로 접속되는지 확인
# 클라이언트 PC에서 실행
ssh -i ~/.ssh/id_ed25519 ops@SERVER_IP
2) 비밀번호 로그인이 막혔는지 확인
# 클라이언트 PC에서 실행(일부러 키 없이 시도)
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no ops@SERVER_IP
5) 포트 변경은 “선택사항” (선행 조건이 더 중요)
SSH 포트 변경은 스캐닝 노이즈를 줄이는 정도의 효과가 있습니다. 하지만 키 인증 강제와 허용 사용자 제한이 먼저입니다. 포트를 바꿀 경우에는 방화벽(UFW) 규칙과 모니터링도 함께 바꿔야 합니다.
6) 운영 팁: AllowUsers vs AllowGroups
AllowUsers는 빠르고 명확하지만 계정이 늘 때마다 설정을 수정해야 합니다. AllowGroups는 운영 조직에서 계정/권한 관리를 표준화하기 좋습니다.
1) ssh 허용 그룹 방식 예시
sudo groupadd -f sshlogin
sudo usermod -aG sshlogin ops
# sshd_config에 다음 추가
# AllowGroups sshlogin
7) 마지막 점검: 로그로 공격/실패 패턴 보기
SSH 관련 로그는 주로 journal에서 확인합니다.
1) 최근 실패/성공 로그 확인
sudo journalctl -u ssh --since "-1h" --no-pager
이 정도만 해도 “대부분의 흔한 SSH 침입 시도”는 의미가 없어집니다. 이후에는 fail2ban, MFA(가능한 환경), bastion host 같은 단계로 확장하면 됩니다.
- 이 글은 ai가 random적으로 만들어 올리는 글입니다. -