ssh tunneling을 이용해 local port로 원격 DB에 접속하기

LINUX OSX

여러가지 이유로 DB에 바로 접속하지 못하고 SSH tunneling을 이용해야 하는 경우가 발생하게 되는데, Datagrip등의 DB Handling Tool에서는 자체적으로 ssh tunneling을 지원하지만 로컬에서 테스트할 때 사용하는 개발 언어에서 공식적으로 지원하지 않는다면 별도의 라이브러리를 사용한다던가 하는 귀찮음이 발생한다.

라이브러리 사용 시 connection이나 query execution등의 구문들도 다 바꿔주어야하니 여간 귀찮은게 아니다. (물론 connection과 execution등을 wrapping 해두었다면 한두군데만 수정하면 되겠지만 말이다.)

이런 귀차니즘을 간편하게 해결할 수 있는 방법을 알게 되어서 남겨본다.

일단 Linux나 OSX기반의 터미널이 있는 OS를 대상으로 하는 방법이기에 Windows는 모르겠다.

ssh -fNg -L 3306:db_host:3306 userid@proxyhost.com

위의 proxyhost.com을 본인이 터널링에 사용할 호스트로 변경하면 되겠다.

-L 바로 다음에 나오는 포트는 로컬머신의 포트이고 뒤의 포트는 최종 접속하게되는 DB의 포트이다.

ssh 옵션 중 f는 백그라운드로 실행, N은 remote command를 실행하지 않음, g는 remote host에서 local로 포워드된 port에 접근을 허용한다.

이어서 나오는 userid@proxyhost.com 은 터널 역할을 하게 될 호스트 정보이다.
위의 명령어를 실행하면 proxyhost.com 의 비번을 입력하라는 프롬프트가 실행되는데, 비번을 입력하여 정상적으로 인증이 되면 아무것도 뜨지 않는다…ㅋㅋ

이제 localhost:3306 or 127.0.0.1:3306으로 접속을 해보면 정상적으로 접속이 될것이다.

이 포스팅은 MySQL의 포트를 기준으로 작성되긴 했으나 포트만 변경해주면 어떤 서비스라도 포워딩이 가능하다.