블로그 릴레이 - EC2 Amazon Linux SSH접속 포트 변경하는 방법

블로그 릴레이 - EC2 Amazon Linux SSH접속 포트 변경하는 방법

Clock Icon2024.11.08

안녕하세요, 임채정입니다.

본 블로그는 당사의 한국어 블로그 릴레이의 20번째 블로그입니다.
이번 블로그에서는 「EC2 Amazon Linux의 SSH 접속 포트를 변경하는 방법」을 정리했습니다.

오늘 검증 내용

EC2 Amazon Linux 의 SSH 접속에서는 22번 포트를 기본적으로 사용합니다.
하지만 환경에 따라서는 22번 포트를 사용할 수 없는 경우도 있기 때문에 블로그에서 22포트를 다른 포트로 변경하는 방법을 정리했습니다.

포트 변경을 위해서는 sshd_config 파일을 수정하면 되지만 수정할 수 있는 방법이 여러 개 존재하기 때문에 하나씩 설명하겠습니다.

일단 테스트를 위해 서버를 하나 작성합니다.

  • OS: Amazon Linux 2023
  • 인스턴스 유형: t2.micro
  • 세큐리티 그룹
    • 유형-SSH, port-22, 소스-내IP ( -> Amazon Linux 에 SSH 접속하기 위한 기본 포트는 22번 )

sshd_config 파일 직접 수정

먼저 이미 생성된 EC2 인스턴스의 경우 EC2 인스턴스에 접속해서 sshd_config 파일 안 에서 포트를 직접 수정할 수 있습니다.
(EC2 인스턴스에 SSH접속하는 명령어는 생략하겠습니다.)

sshd_config 파일을 수정해서 포트 번호를 22번에서 2222번으로 수정해보겠습니다.

sshd_config (port 22 -> 2222)
..
$ sudo vi /etc/ssh/sshd_config
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22
Port 2222
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
..

파일을 설정했으면 SSH 서비스(sshd)를 재시작합니다.

sshd restart
$ sudo systemctl restart sshd

SSH의 상태를 확인해봐도 포트 번호가 변경되서 재시동 된 것을 확인할 수 있습니다.

sshd state
$ sudo systemctl status sshd
# ● sshd.service - OpenSSH server daemon
#      Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
#      Active: active (running) ..
#      ..
# 
# Oct 08 06:09:35 ip-xx-xx-xx-xx.ap-northeast-1.compute.internal systemd[1]: sshd.service: Deactivated successfully.
# Oct 08 06:09:35 ip-xx-xx-xx-xx.ap-northeast-1.compute.internal systemd[1]: Stopped sshd.service - OpenSSH server daemon.
# Oct 08 06:09:35 ip-xx-xx-xx-xx.ap-northeast-1.compute.internal systemd[1]: Starting sshd.service - OpenSSH server daemon...
# Oct 08 06:09:35 ip-xx-xx-xx-xx.ap-northeast-1.compute.internal sshd[3384]: ⭐️Server listening on 0.0.0.0 port 2222.⭐️
# Oct 08 06:09:35 ip-xx-xx-xx-xx.ap-northeast-1.compute.internal sshd[3384]: ⭐️Server listening on :: port 2222.⭐️
# Oct 08 06:09:35 ip-xx-xx-xx-xx.ap-northeast-1.compute.internal systemd[1]: Started sshd.service - OpenSSH server daemon.

포트 번호를 변경했으니 인스턴스에서 로그아웃하고 다시 SSH 접속을 해보겠습니다.

sshd restart
$ ssh -i "lim-tokyo-key.pem" [email protected]
# ssh: connect to host ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com port 22: Connection refused

이제 포트 번호가 변경되어서 재접속하려고 해도 에러가 발생합니다.
Connection refused 에러에 대한 해결방법은 다음 페이지를 참고하세요.
https://repost.aws/knowledge-center/ec2-linux-resolve-ssh-connection-errors

이 블로그에서는 해당 포트에 대한 인바운드 규칙이 세큐리티 그룹에 포함되어 있지 않기 때문에 문제가 발생하고 있습니다.
그렇기 때문에 AWS 콘솔에서 해당 인스턴스에 할당되어 있는 세큐리티 그룹에 변경한 포트 번호로 인바운드 룰을 추가 하겠습니다.

ssh01

포트가 변경된게 맞는지 확실하게 확인하기 위해 기존에 설정되어 있던 22번 포트에 대한 인바운드 규칙을 삭제했습니다.
다시 인스턴스에 SSH 접속을 해보겠습니다.
이 때, 변경된 포트번호를 지정해줘야 하기 때문에 접속 명령어에 -p 옵션를 추가해서 포트 번호를 입력합니다.

ssh 재접속
ssh -p 2222 -i "lim-tokyo-key.pem" [email protected]
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
Last login: Tue Oct  8 05:37:44 2024 from xx-xx-xx-xx
[ec2-user@ip-xx-xx-xx-xx ~]$

이렇게 SSH 포트를 변경해봤습니다.
그렇게 지금 방법은 서버에 직접 들어가서 sshd_config 파일을 수정해야 되기 때문에 혹시 다른 설정을 실수로 변경하지 않을까 걱정될 수도 있습니다.
그런 경우에는 직접적으로 파일을 수정하는 게 아니라 다른 방식으로 sshd_config 파일을 수정할 수도 있습니다.

EC2 사용자 데이터(User Data) 사용하기

새로 만드는 EC2 인스턴스인 경우 사용자 데이터를 활용하면 생성을 하면서 동시에 SSH 접속 포트를 동시에 변경할 수도 있습니다.

User Data 는 EC2 인스턴스를 시작할 때 자동으로 실행할 스크립트나 명령어를 제공하는 기능입니다.

EC2 인스턴스를 생성할 때 고급 세부 정보 설정에서 사용자 데이터를 설정할 수 있습니다.
파일로 업로드 할 수도 있고 코드를 작성할 수도 있습니다.
블로그에서는 포트 번호를 변경하기 위해 다음 코드를 입력했습니다.

사용자 데이터
#!/bin/bash
sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config
systemctl restart sshd

ssh02

변경한 포트로 접속을 해보면 다음과 같이 접속이 잘 되는걸 확인할 수 있습니다.

ssh 접속 테스트
ssh -p 2222 -i "lim-tokyo-key.pem" [email protected]
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
Last login: Tue Oct  8 06:21:31 2024 from xx-xx-xx-xx
[ec2-user@ip-xx-xx-xx-xx ~]$

SSM Run Command 활용하기

만약에 EC2 인스턴스를 이미 생성해서 사용 중일 때 직접적으로 sshd_config 파일에 들어가서 수정하고 싶지 않다면 SSM Run Command 를 활용할 수도 있습니다.
(EC2 사용자 데이터(User Data) 도 이미 생성된 인스턴스에 사용할 수는 있지만 인스턴스를 중지한 후 -> 사용자 데이터 수정 -> 인스턴스 재기동을 해야 하는 번거로움이 있습니다.)

SSM Run Command 를 사용하기 위해서는 EC2 인스턴스에 IAM 규칙을 설정해야 합니다.
IAM 규칙 설정 방법에 대해서는 생략하겠습니다.

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/systems-manager-setting-up.html

먼저 Run Command 에 들어가서 명령 문서를 선택합니다.
Linux 에서 스크립트를 실행하기 위해 AWS-RunShellScript 를 선택합니다.

ssh03

그 후에 명령어를 입력하고

SSM Run Command 명령어
sudo sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config
sudo systemctl restart sshd

그리고 명령어를 실행할 대상의 인스턴스를 선택하고 실행합니다.

ssh04

명령어가 실행되기 까지 잠깐 기다리면 다음과 같이 명령의 실행이 성공으로 표시됩니다.
그러면 에러 없이 잘 실행되었다는 뜻입니다.

ssh05

접속되는지 확인해봐도 변경된 포트 번호로 정상적으로 접속이 됩니다.

ssh 접속 테스트
ssh -p 2222 -i "lim-tokyo-key.pem" [email protected]
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
Last login: Tue Oct  8 06:43:25 2024 from xx-xx-xx-xx
[ec2-user@ip-xx-xx-xx-xx ~]$

마무리

이상으로 한국어 블로그 릴레이의 20번째 블로그인 「Amazon Linux 서버의 SSH 접속을 위한 포트 번호를 변경하는 방법」이었습니다.
다음 21번째 블로그 릴레이는 11월 셋째 주에 공개됩니다.

AWS 사업 본부의 임채정이었습니다.

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.