Computer/LINUX

mysql ssh 터널링

알찬돌삐 2012. 8. 10. 16:10

[서버운영] SSH 포트포워딩을 통한 원격지 데이터베이스 접속

 

mysql은 원격지 접속을 위해서 해당 사용자의 접속 호스트를 '%'로 변경하고 my.cnf의 설정을 바꿔야 합니다.
이렇게 하면 3306 포트가 열리고 mysql이 직접 3306 포트를 리스닝하게 되지요. 자주는 아니지만 원격지에서 편안하게 GUI 쿼리 툴로 mysql을 관리하고자 하려면 이런 필요가 생기기도 합니다. (phpmyadmin이나, 커맨드 라인 mysql client는 사용하기 불편하구요.)
'열려진 포트는 최대한 적을 수록 좋다.' 라는 서버 운영 방침에 비추어 보자면, 이건 좀 찝찝한 문제가 아닐 수 없습니다. 아무래도 보안에 취약할 수 밖에 없구요. (물론 최근 버전의 mysql은 원격 접속시 ssl 연결을 지원합니다만..)

SSH 포트포워딩을 이용하면 이런 문제를 명쾌하게 해결할 수 있습니다. 쓸데없이 3306번 포트를 열 필요도 없으며, 전송되는 패킷이 암호화되기 때문에 혹시 모를 보안 문제도 예방할 수 있습니다.

사용 방법은 간단합니다. (서버에 sshd가 돌아가고, 로컬에 ssh client가 있다고 가정합니다. 윈도우즈라면 putty를 이용할 수 있습니다.)


> ssh -f -N -L3306:localhost:3306 -l user remotehost
...
> user@remotehost password :



이 명령은 ssh를 통해 localhost의 3306 포트로 접속하는 데이터 스트림을 암호화 한 뒤 remotehost로 전송하고, 이를 다시 복호화 해서 원격지의 3306번 포트로 전송하게 합니다.


-f : 백그라운드로 실행하라는 옵션
-N : shell 명령어 실행 금지
-L[port] : local[port]
-l : 접속할 사용자 지정



이렇게 하고 GUI 쿼리 툴 등이 포트포워딩 된 원격지 서버에 접속하고자 할 때 host를 localhost로 포트를 3306으로 지정하면 마치 로컬에서 실행되는 것처럼 원격지 서버에 접속할 수 있습니다.
로컬 포트는 3306이 아니어도 상관 없습니다. 제 경우에 여러대의 서버에 접속할 필요가 있으므로 1번 원격지 서버의 로컬 포워딩 포트는 33060, 1번은 33061... 이런 식으로 지정했습니다.

덧붙여서, 만약 php 스크립트가 포트포워딩 된 원격지 mysql에 접속해서 어떤 일을 처리하고자 한다면 mysql_connect 함수 사용시 host 인자에 'localhost' 대신에 '127.0.0.1'을 넣어주어야 합니다. 왜 localhost가 제대로 작동하지 않는지 모르겠네요. -_-;;

또 덧붙여서, 포트만 바꿔주면 mysql이 아니라 다른 데이터베이스도 접근할 수 있겠지요. 

 

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > LINUX' 카테고리의 다른 글

pam_abl 을 통한 SSH 공격방어  (0) 2012.08.10
PAM (착탈형 인증 모듈)  (0) 2012.08.10
iostat  (0) 2012.08.10
freeSSHd 와 cwRsync 를 이용한 윈도우간의 파일 동기화 따라하기  (0) 2012.08.10
find  (0) 2012.08.10