2010-08-26 43 views
17

He intentado crear un túnel SSH usandoSSH túnel para Python MySQLdb conexión

ssh -L 3306:localhost:22 <hostip> 

A continuación, el funcionamiento de mi script en Python para conectarse a través de localhost

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

Sin embargo, recibo el siguiente error

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

¿Cómo puedo asegurarme de que estoy llegando al host correcto y no solo de algún problema con el enlace?

Respuesta

16

Intente cambiar "localhost" por "127.0.0.1", debería funcionar como esperaba. Este comportamiento se detalla en el manual:

sockets UNIX y canalizaciones con nombre no lo hacen trabajo sobre una red, por lo que si se especifica una serie distinta de localhost, TCP ser utilizado, y se puede especificar una impar puerto si es necesario (el puerto por defecto es 3306):

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

Si realmente había que, usted podría conectarse al host local con TCP por que especifica el nombre de host completo o 127.0.0.1.

+1

Eso lo hizo. Gracias –

3

No puede especificar localhost como nombre de host, ya que esto sugiere que MySQLdb debería intentar usar un socket UNIX. Use 127.0.0.1 para el host en su lugar.

Si desea asegurarse de que la conexión funciona, puede utilizar el cliente estándar de MySQL.

11

¿Se ejecuta mysqld en el puerto 22 del control remoto? llámame ignorante pero creo que lo que estamos tratando de hacer es

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

Luego de realizar las conexiones MySQL en la máquina local se consiguen de forma transparente túnel hacia el host de destino.

+0

Sí, y puede probarlo si tiene un cliente de telnet disponible en el host local: 'telnet localhost 3306' debe establecer una conexión y mostrar un número de versión de MySQL reconocible. –

+0

Has acertado al suponer que tenía el puerto incorrecto. –

+0

Creo que esta respuesta es mejor que la elegida, porque la forma propuesta permite permanecer en su máquina local en lugar de estar remota. –