Туннель SSH для подключения Python MySQLdb - PullRequest
19 голосов
/ 26 августа 2010

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

ssh -L 3306:localhost:22 <hostip>

Затем запускаю мой скрипт на python для подключения через 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)")

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

Ответы [ 3 ]

17 голосов
/ 26 августа 2010

Попробуйте изменить "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 .

13 голосов
/ 26 августа 2010

mysqld работает на порте 22 на пульте? Зовите меня невежественным, но я думаю, что вы пытаетесь сделать

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

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

3 голосов
/ 26 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...