파이썬 SSH 터널링, DB 연결

에어그랩·2024년 4월 12일

개요

프로젝트 도중에 SSH 터널링을 통해, 원격 서버의 DB에 접속할 일이 생겨 파이썬에서의 기능 구현을 찾아보게 되었다. 방법은 여러가지가 있었는데, 그 중 가장 간단하게 구현되는 SSHTunnelForwarder를 사용해서 구현하였다.


SSH 터널링

1. 상황

(A) 원격서버에 있는 MySQL
(B) A에 접속이 가능한 리눅스 서버
(C) 내가 사용중인 서버

  • 최종적으로 (A)MySQL에 접속을 해야 함
  • (C)에서는 방화벽에 걸려 (A)에 접속할 수가 없음
  • (B)에서는 (A)로 접속이 가능함
  • (B)서버에 SSH 터널링을 활용하여, (C)에서 (A)로 접속

2. 파이썬에서 SSH 터널링 하는 방법

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()

참고 자료

https://velog.io/@bymate/SSH-Tunneling%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%B4-%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-MYSQL-%EC%97%B0%EA%B2%B0-%ED%95%98%EA%B8%B0

profile
스마트팜, 스마트팩토리 개발자

0개의 댓글