Добрый день!
Есть база 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 и локальный порт?
Не знаю как работает парамико, но как воркараунд можете сделать туннель, в ~/.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
удаленно к БД подключится нельзя.
Вариант с туннелем не сработал.
При попытке соединиться с базой вылетает ошибка “_mysql_exceptions.OperationalError: (2013, “Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0”)”
Тут надо поиграться с LocalForward, зависит от настроек файрвола, можно попробовать localhost и разные порты перенаправления + посмотреть /etc/hosts.allow и hosts.deny, вообще гугл по этому спокойно помогает. И перед тем как попробовать приконектиться из питона, сделайте это руками: mysql -hmysql.supertunnel ...