Подтвердить что ты не робот

SSH-туннель для соединения с Python MySQLdb

Я попытался создать туннель SSH, используя

ssh -L 3306:localhost:22 <hostip>

Затем запустите мой python script для подключения через localhost

conn = MySQLdb.connect(host'localhost', port=3306, user='bob', passwd='na', db='test')

Однако я получаю следующую ошибку

(2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)")

Как я могу убедиться, что я нахожусь на правильном хосте, а не только на проблему с привязкой?

4b9b3361

Ответ 1

Попробуйте изменить "localhost" на "127.0.0.1", он должен работать так, как вы ожидаете. Это поведение подробно описано в руководстве:

Сокеты UNIX и именованные каналы не работать по сети, поэтому, если вы укажете хост, отличный от localhost, TCP будет использовать, и вы можете указать нечетное порт, если вам нужно (порт по умолчанию 3306):

db=_mysql.connect(host="outhouse", port=3307, passwd="moonpie", db="thangs")

Если вам действительно нужно было, вы могли бы подключиться к локальному хосту с помощью TCP через с указанием полного имени хоста или 127.0.0.1.

Ответ 2

Выполняется ли mysqld на порту 22 на пульте дистанционного управления? Назовите меня невежественным, но я думаю, что вы пытаетесь сделать это

ssh -n -N -f -L 3306:localhost:3306 remotehost

Затем создание соединений MySQL на локальной машине будет прозрачно проходить туннелирование на целевой узел.

Ответ 3

Вы не можете указать localhost как имя хоста, так как это предполагает, что MySQLdb должен попытаться использовать UNIX-сокет. Вместо этого используйте 127.0.0.1 для хоста.

Если вы хотите убедиться, что соединение работает, вы можете использовать стандартный клиент mysql.