SSH 접속 포트 변경
AWS EC2에서 SSH 포트(22 → 7777) 전환 기록#
※ 참고로 실제로 변경된 포트는 7777이 아니다.
이 포스트는 AWS EC2 서버에서 SSH 기본 포트(22)를 비활성화하고, 새로운 포트(7777)로 전환한 전체 과정을 기록한 글이다.
특히 다음 내용을 중심으로 작성하였다.
- 왜 SSH 포트를 변경하게 되었는지
- AWS 보안 그룹과 Ubuntu(systemd) 기반 SSH 동작 구조
- port 7777를 열기 위해 필요한 설정
- ssh.socket 및 override.conf의 역할
- 전환 중 발생한 문제와 원인
- 최종적으로 7777 포트 접근이 가능해지기까지의 과정
이 글은 plzrun.com 서버 운영 중 실제로 겪은 문제를 기반으로 작성하였다.
1. 왜 SSH 포트를 22에서 7777로 바꾸었는가?#
서버를 어디에서든 접속할 수 있어야 했기에 처음엔 SSH 포트를 0.0.0.0/0 전체 공개로 두었다.
하지만 이후 ChatGPT와 대화에서:
- SSH 22 포트를 전체 공개하면 전 세계 봇이 무차별 스캔을 한다
- 공격 로그가 계속 쌓이고, 디스크·CPU 사용량에도 영향을 준다
- 비밀번호 인증이 꺼져 있어도 공격은 계속 시도된다
라는 설명을 듣고, SSH 포트를 변경하는 것이 보안상 더 안전하다고 판단했다.
그러면서도 어디서든 접속할 수 있어서 포트 변경(Port 7777) 을 하게되었다.
2. AWS 보안 그룹에서 Port 7777 허용 추가#
먼저 AWS 콘솔 → EC2 → 보안 그룹에서
SSH(22) 규칙을 삭제하지 않고, 아래처럼 새 규칙을 추가했다.
| 유형 | 프로토콜 | 포트 | 소스 |
|---|---|---|---|
| Custom TCP | TCP | 7777 | 0.0.0.0/0 |
22번을 바로 지우면 접속이 끊길 수 있기 때문에
7777 규칙을 추가하고 접속 테스트가 끝날 때까지 유지했다.
3. Ubuntu 내부에서 SSH 포트를 7777로 변경#
3.1 sshd_config 수정#
sudo vim /etc/ssh/sshd_config아래처럼 수정했다:
Port 7777
PasswordAuthentication no
PermitRootLogin no그 후 문법 체크:
sudo sshd -t
echo $? #0 출력시 정상 (가장 최근 실행된 명령어의 exit code를 출력)문법 오류가 없음을 확인하였다.
4. “SSH Connection refused” 오류 발생#
이 상태에서:
ssh -i ~/.ssh/aws_ec2.pem -p 7777 ubuntu@plzrun.com를 시도했는데,
ssh: connect to host plzrun.com port 7777: Connection refused라는 에러가 발생했다.
이 에러는 “네트워크는 연결되었지만 포트를 리슨 중인 프로세스가 없다”는 뜻이다.
즉, sshd가 7777로 떠 있지 않은 상태였다.
5. 원인 분석: ssh.socket이 22번 포트를 고정적으로 잡고 있었다#
systemctl status로 확인해보니:
ssh.service - OpenBSD Secure Shell server
TriggeredBy: ● ssh.socket
Server listening on 0.0.0.0 port 22.즉:
- Ubuntu EC2 이미지에서 SSH는 ssh.socket(systemd 소켓 활성화) 에 의해 시작된다.
- ssh.socket이 이미 22번 포트를 리슨한 뒤 제어를 넘기기 때문에
sshd_config에서 Port를 바꿔도 포트 변경이 적용되지 않는 구조였다.
즉 포트를 바꾸려면:
sshd_config뿐만 아니라 ssh.socket의 ListenStream 설정도 덮어써야 한다.
6. 해결 방법: override.conf 생성#
systemd는 원본 파일(/usr/lib/systemd/system/ssh.socket)을 직접 수정하지 않는다.
대신 아래 경로에 “drop-in” 파일을 만들 수 있다.
/etc/systemd/system/ssh.socket.d/override.conf생성 명령:
sudo systemctl edit ssh.socket※ 사실 ChatGPT가 위의 명령어를 입력하면
override.conf가 생긴다 하였으나, 어디에도 그런 .conf는 보이지 않았다. 다만,sudo systemctl edit ssh.socket으로 아래의최종 override.conf 내용을 입력하면 어쨌든 포트 7777 Setup이 잘 완료되었다.
편집기에서는 아래와 같은 참고 정보들이 보이지만, 실제 override.conf 내용은 최상단만 반영된다.
※ 위 명령어 입력시 기본 편집기가 vim이 아닌 nano로 설정되어 있을텐데, 나는 nano 편집기 사용법을 몰라서 vim으로 변경했다. 변경 방법은 아래와 같다.
sudo update-alternatives --config editor # 위 명령어 입력시 선택 가능한 편집기 목록이 뜨는데, vim.basic을 선택하면 된다.
최종 override.conf 내용은 아래와 같다.
[Socket]
ListenStream=
ListenStream=7777- 첫 줄의
ListenStream=→ 기존 22 설정을 초기화 - 두 번째 줄의
ListenStream=7777→ 새로운 포트 지정
7. 적용 및 확인#
설정 반영:
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart ssh포트 리슨 확인:
sudo ss -lntp | grep ssh결과:
LISTEN 0 128 0.0.0.0:7777 ...7777가 정상적으로 떠 있음을 확인했다.
8. 새 포트로 SSH 접속 성공#
이제 아래 명령으로 정상 접속된다.
ssh -i ~/.ssh/aws_ec2.pem -p 7777 ubuntu@plzrun.com
# 참고로 aws_ec2.pem은 AWS가 만들어준 SSH private key이다.
# .pem은 Privacy Enhanced Mail의 약자이다.확인 후, 기존 SSH(22) 규칙은 보안 그룹에서 제거하였다.