Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Проблема с подключением к MySQL БД через SSH

database
python
Теги: #<Tag:0x00007f7b70a9f428> #<Tag:0x00007f7b70a9f2e8>

(Sergey Gorbanenko) #1

Добрый день!
Есть база MySQL (пользователь рут, работает с локалхоста)
Есть SSH доступ к серверу (имя, хост и pem-ключ)
Задача: подключится и выполнять запросы к БД.
Я использую paramiko - для подключения по SSH и MySQLdb для подключения и выполнения запросов в БД.

import paramiko
import MySQLdb
myPkey = paramiko.RSAKey.from_private_key_file("путь+имя к ключу")
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #if you want to auto add the host RSA key
ssh.connect("имя хоста", 22,  'имя пользователя', pkey=myPkey)
conn = MySQLdb.connect(host="хост БД",
                           port=порт,
                           user='root',
                           passwd='пароль',
                           db='users')
ssh.close()

В результате выполнения происходит подключение по SSH, но не подключает к БД.
Подскажите, что нужно задавать в “хост БД”?
Может можно как-то сделать проброс портов, чтобы в качестве хоста БД я указывал 127.0.0.1 и локальный порт?


(Александр Таранков) #2

Удаленно к БД нельзя подключаться? Намеренно закрыто?


(Stan) #3

Не знаю как работает парамико, но как воркараунд можете сделать туннель, в ~/.ssh/config как-то так:
Host mysql.supertunnel HostName db_server.com User ssh_username IdentityFile ~/.ssh/config/id_rsa LocalForward 3307 127.0.0.1:3306

и потом просто при коннекте в хостнейме указывать mysql.supertunnel


(Sergey Gorbanenko) #4

удаленно к БД подключится нельзя.
Вариант с туннелем не сработал.
При попытке соединиться с базой вылетает ошибка “_mysql_exceptions.OperationalError: (2013, “Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0”)”


(Stan) #5

Тут надо поиграться с LocalForward, зависит от настроек файрвола, можно попробовать localhost и разные порты перенаправления + посмотреть /etc/hosts.allow и hosts.deny, вообще гугл по этому спокойно помогает. И перед тем как попробовать приконектиться из питона, сделайте это руками:
mysql -hmysql.supertunnel ...