【python】 SSH 터널을 통해 MySQL 연결하는 방법

4125 단어 Linux 명령Python3
SSH 터널을 통해 MySQL 연결하는 방법을 소개하고 싶습니다.
예를 들면 AWS를 사용하고 있어, VPC내에 있는 MySQL에 액세스 하려면 한번 발판 서버 경유하지 않으면 갈 수 없고, 로컬 환경으로부터 직접 할 수 없지요. 이러한 네트워크 환경 구성은 많지 않을까 생각합니다만, 로컬 환경으로부터 직접 MySQL에 접속하고 싶은 장면도 있습니다.

그런 때에 sshtunnel이라는 라이브러리로 실현할 수 있습니다만, SSH 포트 포워딩을 이용해, 처리를 실행하고 있습니다. 간단하게 SSH 포트 포워딩에 대해 설명하고 싶습니다.

SSH 포트 포워딩이란?



클라이언트의 포트를, 직접 액세스 할 수 없는 서버의 포트에 전송해 주는 구조입니다.
코드를 실행하기 전에 SSH 커멘드를 이용해, 로컬로부터 리모트 서버처에 있는 HTTP 서버나 MySQL 서버에 액세스하면, 코드를 보다 이해할 수 있다고 생각합니다.

예를 들어 원격 서버의 IP 주소가 "10.1.1.1"이라고 가정합니다. 정상적인 SSH 연결이면,ssh [ユーザ名]@10.1.1.1
하지만 포트 포워딩을 하는 경우, 옵션 「L」을 부여합니다.SSH -L ローカルポート番号:リモートホストアドレス:ホストポート番号

리모트 서버 「10.1.1.1」의 로컬 호스트에 있는 포트 「3306」의 「MySQL 서버」에 포트 포딩 하는 경우는, 다음과 같이 됩니다.SSH -L 10022:127.0.0.1:3306 [ユーザ名]@10.1.1.1
로컬 포트 ​​번호는 자유롭게 지정할 수 있습니다만, MAMP나 Docker등으로 움직이고 있는 포트와 경합하지 않도록 지정해 주세요. 터미널 창을 두 개 시작하고 한쪽에서 위 명령을 실행 한 후 로컬에서 원격 서버 대상 MySQL에 연결할 수 있는지 확인하십시오.mysql -h 127.0.0.1:10022 -u root -p

실행 코드


#! /usr/env/bin python
# coding: UTF-8

import pymysql
import sshtunnel

with sshtunnel.open_tunnel(
    ("111.111.111.11", 22), // (踏み台サーバのIPアドレス, SSHポート)
    ssh_username="root",
    ssh_pkey="~/.ssh/ida_rsa", // 秘密鍵認証の場合は秘密鍵のパスを記述
    remote_bind_address=("127.0.0.1", 3306), // MySQLが踏み台サーバのローカルにある場合
    local_bind_address=('0.0.0.0', 10022) 
) as tunnel:
        connection = pymysql.connect(host="127.0.0.1",
                                user="hoge",
                                password="hogehoge",
                                db="hogedb",
                                port=10022)


SSH 터널을 통해 MySQL 연결할 수 있습니다.

그림




당황스럽게도 첫 포스트 포딩을 잘 이해하지 못했고 remote_bind_address와 local_bind_address의 값을 설정할지 모르겠습니다. 했다.

Python 코드를 이용하여 SSH 터널을 통해 MySQL 연결할 때 넘어져 버리는 것이 있으면 위에서 시도해보십시오.

좋은 웹페이지 즐겨찾기