프로젝트 도중에 SSH 터널링을 통해, 원격 서버의 DB에 접속할 일이 생겨 파이썬에서의 기능 구현을 찾아보게 되었다. 방법은 여러가지가 있었는데, 그 중 가장 간단하게 구현되는 SSHTunnelForwarder를 사용해서 구현하였다.
(A) 원격서버에 있는 MySQL
(B) A에 접속이 가능한 리눅스 서버
(C) 내가 사용중인 서버
SSH 터널 생성
ssh_ip = "192.168.0.17" # (B)의 IP
ssh_port = 22 # (B)의 port
ssh_user = "root" # (B)의 접속 id
ssh_pkey = "1234" # (B)의 접속 pw
bind_ip = "200.100.150.10 # (C)의 IP
bind_port = 3306 # (C)의 port
tunnel = SSHTunnelForwarder((ssh_ip, int(ssh_port)),
ssh_username=ssh_user,
ssh_pkey=ssh_pkey,
remote_bind_address=(bind_ip, int(bind_port)),
)
MySQL 접속
tunnel.start()
# 사용하는 mysql 라이브러리 맞게 사용
mysql = MySQL("127.0.0.1", # 로컬host 사용
tunnel.local_bind_port, # 터널 bind 포트
mysql_database,
mysql_id,
mysql_pw)
ret = mysql.connect()