2014-02-20 7 views
8

Я использую MySqldb с Python 2.7, чтобы Python, чтобы сделать подключение к другому серверу MySQLВключить Python для подключения к MySQL через SSH туннелирование

import MySQLdb 
db = MySQLdb.connect(host="sql.domain.com", 
    user="dev", 
     passwd="*******", 
     db="appdb") 

Вместо подключения обычно так, как может быть сделано подключение через SSH-туннель, используя пары ключей SSH?

SSH-туннель в идеале должен быть открыт Python. Шлюз SSH-туннеля и сервер MySQL - это одна и та же машина.

+0

Вы google? Открытие туннеля ssh с помощью python: http://stackoverflow.com/questions/4364355/how-to-open-an-ssh-tunnel-using-python, подключение к MySql по туннелю: http://stackoverflow.com/ Вопросы/3577555/ssh-tunnel-for-python-mysqldb-connection – mbatchkarov

+0

У вас, вероятно, есть веские основания использовать SSH, но если это прямое подключение к серверу MySQL, начните использовать SSL. Меньше вещей, которые могут пойти не так. – geertjanvdk

+0

@geertjanvdk Интересно, почему SSL был бы лучшим выбором? Я ищу, чтобы сделать безопасные соединения между клиентом и сервером, и SSH был первым, кто пришел на ум – Nyxynyx

ответ

7

Я предполагаю, что вам понадобится переадресация портов. Я рекомендую sshtunnel.SSHTunnelForwarder

import mysql.connector 
import sshtunnel 

with sshtunnel.SSHTunnelForwarder(
     (_host, _ssh_port), 
     ssh_username=_username, 
     ssh_password=_password, 
     remote_bind_address=(_remote_bind_address, _remote_mysql_port), 
     local_bind_address=(_local_bind_address, _local_mysql_port) 
) as tunnel: 
    connection = mysql.connector.connect(
     user=_db_user, 
     password=_db_password, 
     host=_local_bind_address, 
     database=_db_name, 
     port=_local_mysql_port) 
    ... 
+0

Что я могу добавить в remote_bind_address? Где я могу найти эту информацию? –

+0

Если вы находитесь на своем месте, вы можете попробовать что-то вроде этого: '_remote_bind_address = '127.0.0.1' _local_bind_address = '0.0.0.0'' –

+0

Какой тип пересылки? Удаленная переадресация? Нужна ли настройка сервера? –

Смежные вопросы