현재 우리 서비스의 DB 서버는 접근 허용 IP 를 본서버 IP로만 설정해놓은 상태이다.
따라서 DB 테이블을 보려면 ssh 로 본서버 접속 → ssh 로 DB 서버 접속 → mysql 로 테이블 확인 의 과정을 거치게 되는데, 이게 은근히 귀찮은 일이 아닐 수 없다..
그리고 터미널로 테이블을 확인해야하니 평소 Sequel Ace 를 사용하던 것과 비교했을 때 훨씬 불편했다.
그러던 와중에 SSH 터널링으로 해결할 수 있다는 사실을 알고 도전했다.
DB 서버에 직접 접근할 수는 없으니 본서버를 터널로 사용해서 DB서버에 접근하는 것이라고 보면 된다.
본서버의 3306 포트를 열어줬다.
본서버에서 SSH -L
명령을 통해 ssh 포트포워딩을 해준다.
-L 옵션의 의미는 “지정된 원격 호스트와 포트에 전송할 로컬 포트를 설정한다” 이다.
ssh -p {DB 서버 ssh 포트} -L 3306:127.0.0.1:3306 {DB 서버 계정}@{DB 서버 IP}
// 예시
ssh -p 1111 -L 2222:127.0.0.1:3333 [email protected]
이것의 의미를 풀어서 설명하면 본서버의 로컬(127.0.0.1)에서 2222
포트에 접속할시 123.456.789
의 3333
포트로 접속한다는 의미이고, 이때 DB 서버 ssh 연결을 할 때 1111
포트를 사용한다는 것이다.
이것을 로컬 터널링이라고 한다.
이것을 입력하면 비밀번호를 입력하라고 나오고, 비밀번호를 입력하면 터널링이 완성된것이다.
ssh -CNf -p {비밀} -L 3306:127.0.0.1:3306 {계정}@{비밀}
잘 연결되는 것을 확인한 후 -CNf
옵션으로 백그라운드에서 실행되도록 하였고, mysql 포트인 3306 으로 접속하면 DB 서버의 3306 포트로 접근하도록 했다.
설정하고 netstat -nltp
로 확인해보면 3306 포트가 열려있는 것을 볼 수 있다.
이렇게 하면 이렇게 본서버에 접근하여 private DB에 접근할 수 있다.
Sequel Ace 로 쾌적하게 DB를 볼 수 있고 관리할 수 있다는 점에서 정말 유용하다.
그런데 이렇게 되면 터널링을 활성화하고 있는 동안은 본서버에만 접근할 수 있는 사용자라면 모두 DB에 접근할 수 있기 때문에 private DB 서버를 만든 의미가 없어지는 것 같다.
그래서 개발 중에 DB의 데이터들을 자세히 빠르게 봐야할 때만 터널링을 사용하고 바로 터널링을 종료해야 할 것 같고, 서비스 배포 후에는 절대 사용하면 안될 것 같다.