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)")
Как я могу убедиться, что я нахожусь на правильном хосте, а не только на проблему с привязкой?
Ответы
Ответ 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.