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) 규칙은 보안 그룹에서 제거하였다.