Linux/네트워크 및 서비스의 활용

SSH 로컬 포트 포워딩하여 Flask 서버 접속

Linuxpia4U 2025. 5. 21. 15:46
반응형

AWS EC2에서 포트가 막힌 경우, SSH 로컬 포트 포워딩으로 Flask 서버 접속하기

AWS EC2를 사용하다 보면, 보안 그룹(Security Group)에서 포트를 열 수 없는 경우가 있습니다. 특히 교육용 계정이나 제한된 권한의 인스턴스에서는 외부에서 Flask 서버(http://EC2-IP:8000)로 직접 접속이 불가능합니다.

이때 SSH 로컬 포트 포워딩 (SSH Tunnel)을 이용하면, 내 로컬 PC에서 EC2의 Flask 서버에 간접적으로 접근할 수 있습니다.


상황 예시

  • EC2 인스턴스는 Amazon Linux 2023
  • Flask 서버는 EC2 내부의 포트 8000에서 실행
  • 보안 그룹에서 포트 8000을 열 수 없음
  • SSH 접속은 가능함

1. EC2에서 Flask 서버 실행

우선 EC2 인스턴스에서 Flask 서버를 실행합니다.

cd ~/flask
source venv/bin/activate
export FLASK_APP=app.py         # 실제 파일명으로 교체
export FLASK_ENV=development    # 디버깅용
flask run --host=127.0.0.1 --port=8000

주의: --host=127.0.0.1로 설정해야만 SSH 포워딩과 호환됩니다. 기본은 localhost이므로 생략 가능.


2. 로컬에서 SSH 포트 포워딩 연결

EC2 인스턴스에 SSH 접속 시 다음과 같이 -L 옵션을 추가하여 포트를 연결합니다.

ssh -i pem키파일 -L 8000:localhost:8000 ec2-user@<EC2-PUBLIC-IP>

예시:

ssh -i test.pem -L 8000:localhost:8000 ec2-user@아이피

이 명령의 의미는 다음과 같습니다:

  • 8000:localhost:8000: 내 PC의 8000번 포트를 EC2의 localhost:8000에 연결
  • 이 SSH 세션이 유지되는 동안, http://localhost:8000은 EC2 서버의 Flask에 직접 연결됨

3. 브라우저에서 접속 확인

SSH 세션을 유지한 상태로, 로컬 브라우저에서 아래 주소를 입력합니다:

http://localhost:8000

Flask 앱이 정상적으로 실행 중이라면, 페이지가 로드될 것입니다.


4. 포트 포워딩을 종료하려면?

  • SSH 세션을 종료(Ctrl+C 또는 exit)하면 포워딩도 자동으로 종료됩니다.
  • Flask 서버를 백그라운드에서 유지하고 싶다면 tmux, screen, 또는 nohup을 사용할 수 있습니다.

정리

항목 설명
문제 EC2 보안 그룹을 수정할 수 없음 (포트 차단)
해결 SSH 로컬 포트 포워딩을 통해 우회 접속
접속 방법 ssh -L <local_port>:localhost:<remote_port>
접속 주소 http://localhost:<local_port>

마무리

보안 그룹 제한으로 인해 직접 포트를 열 수 없는 상황에서도, SSH 로컬 포트 포워딩을 통해 웹 서비스 테스트 및 개발이 가능합니다. EC2에서 실행한 Flask 서버를 로컬에서 브라우저로 직접 확인할 수 있어 매우 유용한 개발 도구입니다.

실무 환경에서는 보안 강화를 위해 필요 최소한의 포트만 노출하고, 포워딩은 임시 개발 용도로만 사용하는 것이 좋습니다.

반응형