【python】 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 연결할 때 넘어져 버리는 것이 있으면 위에서 시도해보십시오.
Reference
이 문제에 관하여(【python】 SSH 터널을 통해 MySQL 연결하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tyabotyabo/items/58ebe838739206ab3130
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#! /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 연결할 때 넘어져 버리는 것이 있으면 위에서 시도해보십시오.
Reference
이 문제에 관하여(【python】 SSH 터널을 통해 MySQL 연결하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tyabotyabo/items/58ebe838739206ab3130
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【python】 SSH 터널을 통해 MySQL 연결하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tyabotyabo/items/58ebe838739206ab3130텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)