Подключение к MySQL (MariaDB) на удаленном сервере по SSH
Не получается подключиться к mysql на удаленном сервере. Ошибка:
mysql.connector.errors.DatabaseError: 2003 (HY000): Can't connect to MySQL server on 'xxx.hoct.com:3306' (10060)
Подключение к серверу по ssh происходит. Для SSH туннеля выбрал paramiko
, т.к. подключиться получается только если отключить алгоритмы - ['rsa-sha2-512', 'rsa-sha2-256']
. Видел много примеров, как делается ssh туннель через библиотеку sshtunnel
, но как в ней отключить алгоритмы я не понял.
Скорее всего mysql.connector
нужно, как то передать, что бы соединение происходило через ssh туннель. Прошу помочь исправить код.
import mysql.connector # pip install mysql-connector-python
from paramiko import RSAKey, SSHClient, Transport
ssh_passprase = 'passprase'
ssh_key_path = 'C:\\Users\\dell\\.ssh\\deploy_pk2'
private_key = RSAKey.from_private_key_file(ssh_key_path, password=ssh_passprase)
ssh_host = 'xxx.hoct.com'
ssh_username = 'user'
ssh_port = 22
sql_hostname = 'localhost'
sql_port = 3306
sql_username = 'user'
sql_password = 'password'
sql_main_database = 'db'
transport = Transport((ssh_host, int(ssh_port)))
transport.disabled_algorithms = {'pubkeys': ['rsa-sha2-512', 'rsa-sha2-256']}
transport.connect(username=ssh_username, pkey=private_key)
transport.local_bind_address = (sql_port, sql_port)
transport.open_channel("session", (ssh_host, sql_port), (sql_hostname, sql_port))
print(mysql.connector.__version__)
cnx = mysql.connector.connect(user=sql_username, password=sql_password,
host=sql_hostname, port=sql_port,
database=sql_main_database,
)
cursor = cnx.cursor()
query = "SELECT * FROM price_source"
cursor.execute(query)
for row in cursor:
print(row)
cnx.close()
transport.close()
Источник: Stack Overflow на русском