여러가지 이유로 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의 포트를 기준으로 작성되긴 했으나 포트만 변경해주면 어떤 서비스라도 포워딩이 가능하다.