// blog post
SSH 터널링으로 막힌 서비스에 접속하기 — 금융IT 현장 경험담
금융IT에서 SSH 터널링은 생존 도구였습니다
금융IT에서 20년을 일하면서, 외부망 차단은 항상 마주치는 현실이었습니다. 개발 서버의 DB를 확인하고 싶은데 직접 접근이 안 되고, 내부 관리자 페이지를 봐야 하는데 VPN 신청에 3일이 걸리고... 이런 상황에서 SSH 터널링은 저한테 생존 도구 같은 존재였습니다.
SSH 터널링은 SSH 연결 위에 다른 네트워크 트래픽을 실어 보내는 기술입니다. 외부에서 직접 접근할 수 없는 서버 내부의 서비스(데이터베이스, 관리자 페이지, Redis 등)에 안전하게 접속할 수 있어요.
로컬 포워딩 (Local Forwarding)
가장 자주 쓰는 방식입니다. 내 기기의 특정 포트를 원격 서버를 거쳐 다른 서비스로 연결합니다.
구조
[내 기기:로컬포트] → [SSH 서버] → [대상 서비스:원격포트]
명령어 예시
# 원격 MySQL에 접속
ssh -L 3306:db-server:3306 user@ssh-server
# 원격 Redis에 접속
ssh -L 6379:redis-server:6379 user@ssh-server
# 원격 웹 서비스에 접속
ssh -L 8080:internal-app:80 user@ssh-server
VibeShell에서 터널 설정하기
VibeShell을 만들면서 터널링 기능은 꼭 넣고 싶었습니다. 모바일에서도 내부 서비스에 접근할 수 있으면 정말 편하거든요. 설정 방법은 간단합니다:
- 연결 설정에서 '터널링' 탭을 선택합니다
- 포워딩 규칙을 추가합니다 (유형, 로컬 포트, 원격 호스트, 원격 포트)
- 서버에 접속하면 터널이 자동으로 열립니다
자세한 설정 과정은 터널링 가이드에 스크린샷과 함께 정리해두었습니다.
실전 예시
원격 데이터베이스 접속
상황: 개발 서버의 MySQL이 외부 접근을 차단하고 있습니다.
로컬 포트: 3306
원격 호스트: localhost (SSH 서버 자신)
원격 포트: 3306
설정 후 MySQL 클라이언트에서 localhost:3306으로 접속하면 원격 DB에 연결됩니다.
내부 관리자 페이지 접속
상황: 사내 관리자 페이지가 10.0.1.100:8080에서 실행 중이지만 외부에서 접근할 수 없습니다.
로컬 포트: 8080
원격 호스트: 10.0.1.100
원격 포트: 8080
브라우저에서 localhost:8080을 열면 관리자 페이지에 접속할 수 있습니다.
여러 터널 동시 사용
VibeShell에서는 하나의 연결에 여러 포워딩 규칙을 추가할 수 있습니다. DB, Redis, 웹 서비스를 동시에 터널링하는 거죠. 핀테크 CTO 시절에 개발 서버 3~4개를 동시에 터널링해서 쓰던 경험이 이 기능을 만드는 데 도움이 됐습니다.
보안 고려사항
- SSH 터널은 SSH 연결 자체의 암호화를 사용합니다. 터널을 통과하는 트래픽은 자동으로 암호화돼요.
- 로컬 포트를
0.0.0.0으로 바인딩하면 같은 네트워크의 다른 기기도 접근할 수 있으니 주의하세요. 기본값인 localhost 바인딩을 유지하는 게 안전합니다. - 터널 사용이 끝나면 연결을 종료하여 포트를 닫아두세요.
정리
SSH 터널링은 VPN 없이 내부 서비스에 접근하는 가장 간단한 방법입니다. VibeShell에서 터널을 설정해두면 모바일에서도 원격 DB 확인, 내부 서비스 접속이 가능해요.
저는 We've Solutions를 창업하고 나서도 이 기술을 매일 쓰고 있습니다. 클라이언트 서버 점검할 때, 개발 환경 확인할 때... 20년간 써온 기술이 지금도 현역이라는 게 참 신기하기도 합니다.