← 전체 글로 돌아가기

웹 개발

SSH 포트를 바꿀 때 실수하지 않는 순서

SSH 포트를 변경하다가 현재 세션까지 끊기면 서버에 접근할 수 없다. 기존 세션을 유지하면서 안전하게 포트를 바꾸는 순서를 정리했다.

SSH 기본 포트 22는 자동화된 스캐너가 쉬지 않고 두드린다. 보안상 큰 효과는 아니지만 로그 노이즈를 줄이는 데는 도움이 된다. 문제는 포트를 바꾸는 과정에서 실수하면 서버에서 잠겨버린다는 점이다.

바꾸기 전에 확인할 것

먼저 현재 방화벽 상태를 확인한다.

sudo ufw status numbered
# 또는
sudo ss -lntp | grep sshd

22번이 허용돼 있는지, 그리고 내가 쓰려는 새 포트가 다른 서비스와 충돌하지 않는지 체크한다. 잘 알려진 포트(1024 미만)는 피하고, 49152–65535 범위의 비공개 포트를 쓰는 게 일반적이다.

안전한 순서

핵심은 새 포트로 접속이 되는 것을 확인하고 나서 기존 포트를 닫는 것이다. 순서를 거꾸로 하면 안 된다.

1단계: sshd 설정에 새 포트 추가 (기존 포트는 유지)

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%Y%m%d)
sudo nano /etc/ssh/sshd_config
# 기존 Port 22 줄 아래에 추가
Port 22
Port 2222

2단계: 방화벽에 새 포트 허용

sudo ufw allow 2222/tcp
sudo ufw reload

3단계: sshd 재시작

sudo systemctl restart sshd
sudo ss -lntp | grep sshd
# 22와 2222 둘 다 LISTEN 상태인지 확인

4단계: 새 터미널에서 새 포트로 접속 테스트

현재 세션은 그대로 유지하면서 새 창에서 접속해본다.

ssh -p 2222 user@server-ip

접속이 되면 5단계로 넘어간다. 안 되면 현재 세션에서 원인을 찾는다.

5단계: 기존 포트 제거

# sshd_config에서 Port 22 줄 삭제
sudo nano /etc/ssh/sshd_config

# 방화벽에서 22 제거
sudo ufw delete allow 22/tcp
sudo ufw reload

sudo systemctl restart sshd

이후에 챙길 것

포트가 바뀌면 ~/.ssh/config를 업데이트해야 한다.

Host myserver
  HostName 1.2.3.4
  Port 2222
  User myuser
  IdentityFile ~/.ssh/id_ed25519

CI/CD 파이프라인이나 배포 스크립트에서 SSH를 직접 쓰는 곳도 포트를 바꿔줘야 한다. 바꾸고 나서 한두 개는 꼭 빠뜨린 곳이 있으니 한 번 전체 검색해보는 게 낫다.