반응형
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 서버를 로컬에서 브라우저로 직접 확인할 수 있어 매우 유용한 개발 도구입니다.
실무 환경에서는 보안 강화를 위해 필요 최소한의 포트만 노출하고, 포워딩은 임시 개발 용도로만 사용하는 것이 좋습니다.
반응형
'Linux > 네트워크 및 서비스의 활용' 카테고리의 다른 글
온프레미스(On-Premise), 클라우드와 비교 (1) | 2025.05.28 |
---|---|
AWS EC2 인스턴스에 새로운 사용자 계정을 생성하고, 외부에서 SSH 접근 (2) | 2025.05.27 |
VMware 네트워크 모드 비교: 브리지 모드 vs NAT 모드 (3) | 2025.05.09 |
IoT에 적합한 라즈베리파이 (10) | 2025.02.04 |
dhcpd.conf 파일의 중요 내용 (3) | 2025.01.29 |