Backend/기타

SSH 포트 포워딩

sangwonYoon 2023. 7. 11. 01:09

서버에서 FastAPI로 구현한 모델 추론 API를 테스트하다가 신기한 현상을 겪었다. 원격 서버와 로컬은 VSCode의 Remote - SSH라는 익스텐션을 활용해 ssh 연결을 한 상태였다.

Remote - SSH 익스텐션

 

이 상태에서 평범하게 uvicorn을 통해 8000번 포트를 열어 API 서버를 실행시켰다.

 

그런데 로컬 환경의 8000번 포트에 접근을 하면 원격 서버의 8000번 포트로 접근이 되는 것이었다!

분명 로컬이랑 원격 서버는 ssh밖에 연결된 게 없는데..?
이런 상황으로 이해할 수 있다.

분명 원격 서버에서 API 서버를 실행시켰는데 로컬의 8000번 포트에서 이 API 서버에 접근할 수 있는 이 상황이 이해가 되지 않아 주변 지인들에게 도움을 구한 끝에 원인을 찾을 수 있었다. 바로 VSCode의 Remote - SSH 익스텐션이 ssh 포트 포워딩(ssh 터널링이라고도 불린다.)을 지원해주기 때문이었다. 

 

SSH 포트 포워딩

ssh 포트 포워딩이란, ssh 연결을 통해 원격 서버와 통신을 하는 방식으로, ssh 서버가 일종의 프록시 서버와 같은 역할을 한다. 원격 서버의 포트 B를 로컬의 포트 A에 포트 포워딩 할 경우, 로컬의 포트 A에 보낸 요청이 ssh 연결을 통해 ssh 서버에 전달되고, 최종적으로 원격 서버의 포트 B에 전달된다.

포트 A와 포트 B가 8000번 포트라고 생각하면 된다.

위와 같은 구조로 나는 로컬 환경의 8000번 포트로 원격 서버에 실행시킨 API 서버의 swagger 문서를 확인할 수 있었던 것이다.

일반적으로 ssh 포트 포워딩을 사용하는 경우는 방화벽으로 인해 접근할 수 없는 포트를 ssh 포트 포워딩으로 우회해서 접근할 때 사용한다고 한다. 이번에 진행하고 있는 법률 상담 챗봇 프로젝트에서 서버를 배포하는 과정에서 비슷한 문제를 겪고 있어서 ssh 포트 포워딩으로 문제를 해결해보려고 한다. 다음 포스팅에서 ssh 포트 포워딩을 통해 문제 해결을 시도한 내용을 적어보겠다.

 

(잘못된 내용을 지적해주시거나 내용에 관한 피드백은 언제나 환영입니다!)