안녕하세요. 비전 IDC 기술팀입니다.
SSH 기본 포트인 22번은 인터넷 전역에서 자동화된 로그인 시도가 끊임없이 들어오는 포트입니다. SSH 포트를 다른 번호로 바꾸는 것만으로 보안이 완성되지는 않지만, 무차별 대입 시도와 로그 노이즈를 크게 줄일 수 있어 서버 운영에 도움이 됩니다.
다만 CentOS 7에서는 sshd_config만 수정하면 SELinux와 firewalld 때문에 sshd가 시작되지 않거나 새 포트로 접속할 수 없어 서버에 들어가지 못하는 상황이 자주 발생합니다. 이 문서에서는 기존 22번 포트를 유지한 채 새 포트를 추가하고, 새 포트 접속을 확인한 뒤 22번을 닫는 안전한 순서로 SSH 포트를 변경하는 방법을 설명합니다. 예시 포트는 2222를 사용합니다.
적용 환경
- 운영체제: CentOS Linux 7
- SSH 서버: OpenSSH (
sshd), 설정 파일/etc/ssh/sshd_config - SELinux 관리 도구:
semanage(policycoreutils-python패키지) - 방화벽: firewalld
- 예시 새 포트: TCP
2222
1. 작업 전 확인 사항
작업 도중 접속이 끊겨도 복구할 수 있도록 다음 사항을 먼저 준비합니다.
- 현재 SSH 세션을 작업이 끝날 때까지 닫지 않습니다. 이미 연결된 세션은 sshd를 재시작해도 대부분 유지됩니다.
- VPS는 VNC 또는 웹 콘솔, 단독서버는 KVM/IPMI 등 SSH를 거치지 않는 콘솔 접속 수단을 확인해 둡니다.
- 서버 외부에 별도의 네트워크 방화벽이나 보안 정책을 사용하고 있다면 새 포트가 허용되어 있는지 확인합니다.
현재 sshd가 대기 중인 포트를 확인합니다.
sudo ss -tlnp | grep sshd
기본 상태라면 0.0.0.0:22와 [::]:22가 표시됩니다. 새로 사용할 포트가 다른 서비스에서 사용 중이지 않은지도 확인합니다. 아무것도 출력되지 않으면 사용 가능한 포트입니다.
sudo ss -tlnp | grep ':2222 '
SELinux와 firewalld 상태도 확인합니다.
getenforce
sudo firewall-cmd --state
2. sshd_config 백업
설정 파일을 수정하기 전에 원본을 백업합니다. 문제가 생기면 이 파일로 즉시 되돌릴 수 있습니다.
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%Y%m%d)
ls -l /etc/ssh/sshd_config*
3. SELinux에 새 SSH 포트 등록
SELinux가 Enforcing 상태인 CentOS 7에서는 sshd가 SELinux 정책에 ssh_port_t 유형으로 등록된 포트에서만 대기할 수 있습니다. 새 포트를 등록하지 않으면 sshd가 해당 포트를 열지 못하고, 설정에 따라 서비스 시작 자체가 실패합니다.
semanage 명령이 없다면 먼저 패키지를 설치합니다.
sudo yum install -y policycoreutils-python
현재 SSH 포트로 등록된 목록을 확인합니다.
sudo semanage port -l | grep ssh_port_t
기본 상태에서는 ssh_port_t tcp 22만 표시됩니다. 새 포트 2222를 추가합니다.
sudo semanage port -a -t ssh_port_t -p tcp 2222
sudo semanage port -l | grep ssh_port_t
결과에 2222, 22가 함께 표시되면 등록된 것입니다.
SELinux가 Permissive 또는 Disabled 상태라면 이 단계를 생략해도 sshd는 동작하지만, 나중에 SELinux를 다시 활성화할 경우를 대비해 등록해 두는 것을 권장합니다.
4. firewalld에서 새 포트 허용
새 포트를 방화벽에 영구 규칙으로 추가하고 다시 불러옵니다. 이 단계에서는 기존 22번(ssh 서비스) 허용 규칙을 제거하지 않습니다.
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
출력의 ports: 항목에 2222/tcp가 있고, services: 항목에 ssh가 그대로 남아 있는지 확인합니다.
5. sshd_config에 새 포트 추가
설정 파일을 엽니다.
sudo vi /etc/ssh/sshd_config
기본 파일에는 #Port 22가 주석 처리되어 있으며, 그 바로 위에 SELinux 시스템에서는 semanage로 포트를 등록해야 한다는 안내 주석이 있습니다. 앞 단계에서 이미 등록했으므로 포트만 추가하면 됩니다. Port 줄이 모두 주석 상태이면 기본값 22번을 사용합니다. 전환 기간 동안 두 포트를 모두 사용하도록 다음과 같이 Port 줄을 두 개 작성합니다.
#Port 22
Port 22
Port 2222
저장 후 설정 문법을 검사합니다. 아무 메시지도 출력되지 않으면 문법상 문제가 없는 것입니다.
sudo sshd -t
오류 메시지가 표시되면 해당 줄을 수정한 뒤 다시 검사합니다. 검사를 통과하지 못한 상태로 sshd를 재시작하지 마십시오.
6. sshd 재시작 및 대기 포트 확인
sudo systemctl restart sshd
systemctl status sshd
sshd가 두 포트에서 모두 대기하는지 확인합니다.
sudo ss -tlnp | grep sshd
LISTEN 0 128 0.0.0.0:2222 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=5))
LISTEN 0 128 [::]:2222 [::]:* users:(("sshd",pid=1234,fd=4))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1234,fd=6))
위 출력은 예시이며 PID와 순서는 서버마다 다릅니다. 2222가 보이지 않는다면 SELinux 등록 누락 가능성이 높으므로 로그를 확인합니다.
sudo journalctl -u sshd -n 30 --no-pager
7. 새 포트로 접속 테스트
기존 세션은 그대로 둔 채 새 터미널 창을 열어 새 포트로 접속합니다. 서버 IP와 계정은 실제 값으로 바꿔 입력합니다.
ssh -p 2222 사용자명@서버IP
Windows에서 PuTTY를 사용한다면 Port 항목에 2222를 입력해 접속합니다. 자세한 사용법은 Windows PC에서 PuTTY로 SSH 접속하는 방법을 참고하십시오.
새 포트 접속이 되지 않는다면 22번 세션에서 다음을 차례로 확인합니다.
ss -tlnp에서 2222 대기 여부semanage port -l | grep ssh_port_t에 2222 등록 여부firewall-cmd --list-all에2222/tcp포함 여부- 서버 외부 네트워크 방화벽 정책
8. 기존 22번 포트 닫기
새 포트 접속이 정상적으로 확인되었다면 22번 포트를 닫습니다. 새 포트로 접속한 세션도 하나 열어 둔 상태에서 진행하는 것을 권장합니다.
sshd_config에서 Port 22 제거
sudo vi /etc/ssh/sshd_config
#Port 22
Port 2222
sudo sshd -t
sudo systemctl restart sshd
sudo ss -tlnp | grep sshd
이제 2222 포트만 표시되어야 합니다.
firewalld에서 기존 SSH 서비스 제거
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
services: 목록에서 ssh가 사라지고 ports:에 2222/tcp만 남아 있는지 확인합니다. 마지막으로 새 터미널에서 다시 한 번 ssh -p 2222 접속을 확인합니다.
fail2ban 등 SSH 로그인 차단 도구를 사용하고 있다면 해당 도구의 SSH 감시 포트 설정도 새 포트로 함께 변경해야 차단이 올바르게 동작합니다.
9. 자주 발생하는 문제와 복구 방법
| 증상 | 가능한 원인 | 확인 및 해결 방향 |
|---|---|---|
systemctl restart sshd 실패 |
설정 문법 오류 또는 SELinux 포트 미등록 | sshd -t와 journalctl -u sshd를 확인하고, semanage port -a -t ssh_port_t -p tcp 2222를 실행했는지 확인합니다. |
로그에 Bind to port 2222 ... failed: Permission denied |
SELinux가 새 포트 사용을 차단 | semanage로 포트를 등록한 뒤 sshd를 재시작합니다. |
로그에 Address already in use |
다른 프로세스가 같은 포트 사용 | ss -tlnp | grep ':2222 '로 점유 프로세스를 확인하고 다른 포트를 선택합니다. |
| sshd는 2222에서 대기하지만 외부 접속 시간 초과 | firewalld 또는 외부 방화벽 미허용 | firewall-cmd --list-all과 외부 방화벽 정책을 확인합니다. |
semanage: command not found |
관리 도구 패키지 미설치 | yum install -y policycoreutils-python으로 설치합니다. |
| 22번과 새 포트 모두 접속 불가 | 설정 오류 상태에서 기존 세션 종료 | 콘솔로 접속해 아래 복구 절차를 진행합니다. |
콘솔에서 원래 설정으로 복구
SSH로 접속할 수 없게 되었다면 VPS의 VNC·웹 콘솔 또는 단독서버의 KVM/IPMI로 로그인해 백업 파일을 복원합니다. 백업 파일 이름의 날짜는 실제 파일명에 맞게 입력합니다.
ls -l /etc/ssh/sshd_config.bak.*
sudo cp -a /etc/ssh/sshd_config.bak.YYYYMMDD /etc/ssh/sshd_config
sudo sshd -t
sudo systemctl restart sshd
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
해결되지 않으면 비전 IDC 1:1 문의(https://visionidc.com/submitticket.php) 또는 텔레그램 VISIONIDC24로 문의해 주시기 바랍니다.
10. 관련 기술자료와 공식 참고자료
관련 비전 IDC 기술자료
- Ubuntu SSH 접속 포트 변경하는 방법 — Ubuntu 서버를 사용하는 경우
- 리눅스 서버 SSH 키 인증 로그인 설정 방법 — 포트 변경과 함께 적용하면 좋은 보안 설정
- Windows PC에서 PuTTY로 SSH 접속하는 방법 — 변경한 포트로 접속하는 방법
- CentOS 7에서 SSH 접속 시 Host key verification failed 오류를 해결하는 방법
- CentOS 7에서 yum 저장소 오류를 Vault 저장소로 변경하여 해결하는 방법
공식 참고자료
- OpenSSH sshd_config 매뉴얼 —
Port등 설정 항목 설명 - CentOS Project - CentOS Linux — CentOS Linux 7 지원 종료 일정
11. 자주 묻는 질문
SSH 포트만 바꾸면 보안이 충분한가요?
포트 변경은 자동화된 공격 시도를 줄이는 보조 수단입니다. 포트 스캔으로 새 포트를 찾아낼 수 있으므로 강력한 비밀번호, SSH 키 인증, root 직접 로그인 제한, 로그인 실패 차단 같은 설정을 함께 적용하는 것이 좋습니다.
sshd를 재시작하면 현재 접속이 끊기나요?
일반적으로 이미 연결된 SSH 세션은 유지되고 새 연결부터 변경된 설정이 적용됩니다. 그래도 만일에 대비해 콘솔 접속 수단을 확보한 상태에서 작업하십시오.
scp나 sftp도 새 포트를 지정해야 하나요?
네. SSH를 사용하는 모든 도구에 새 포트를 지정해야 합니다. ssh는 소문자 -p 2222, scp는 대문자 -P 2222, sftp는 -P 2222를 사용합니다. 백업 스크립트나 배포 도구의 설정도 함께 수정하십시오.
새 포트로 접속할 때 호스트 키 경고가 다시 표시됩니다.
SSH 클라이언트는 기본 포트가 아닌 경우 [서버IP]:2222 형식으로 호스트 키를 별도로 기록하므로 처음 한 번은 확인 메시지가 표시될 수 있습니다. 서버의 호스트 키 자체를 바꾸지 않았다면 지문을 확인한 뒤 수락하면 됩니다.
마무리
이번 문서에서는 CentOS 7에서 SSH 포트를 2222로 변경하는 과정을 백업, SELinux 포트 등록, firewalld 허용, sshd_config 수정과 문법 검사, 재시작, 접속 테스트, 기존 22번 포트 제거 순서로 살펴봤습니다.
핵심은 새 포트 접속을 확인하기 전까지 22번 포트와 기존 세션을 유지하는 것입니다. 이 순서를 지키면 설정 실수가 있더라도 서버에 접속하지 못하는 상황을 피할 수 있습니다.
