2010-08-26 13 views
17

Próbowałem tworzenia tunelu SSH przy użyciuSSH Tunel dla Pythona MySQLdb połączenie

ssh -L 3306:localhost:22 <hostip> 

następnie uruchomić mój skrypt Pythona do podłączenia poprzez localhost

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

Jednak pojawia się następujący błąd

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

Jak mogę upewnić się, że trafiam na prawidłowy host, a nie tylko problem z bindem?

Odpowiedz

16

Spróbuj zmienić "localhost" na "127.0.0.1", powinno działać zgodnie z oczekiwaniami. Takie zachowanie jest szczegółowo przedstawiony w manual:

Gniazda UNIX i potoki nazwane nie pracy w sieci, więc jeśli podasz przyjmującym inne niż localhost, TCP będzie być używane, można określić dziwne portu jeśli trzeba (domyślny port jest 3306):

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

Jeśli naprawdę musiał, można połączyć się z lokalnego hosta TCP przez podając pełną nazwę hosta lub 127.0.0.1 .

+1

To się udało. Dzięki –

3

Nie można podać localhost jako nazwy hosta, ponieważ sugeruje to, że MySQLdb powinien spróbować użyć gniazda UNIX. Zamiast tego użyj hosta 127.0.0.1.

Jeśli chcesz się upewnić, że połączenie działa, możesz użyć standardowego klienta mysql.

11

Czy mysqld działa na porcie 22 na pilocie? Zadzwoń do mnie ignorantem, ale myślę, że to, co próbujesz zrobić, to

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

Następnie dokonywania połączeń MySQL na komputerze lokalnym będzie przejrzysty się nad tunelowanych do hosta docelowego.

+0

Tak, i możesz go przetestować, jeśli masz dostęp do klienta Telnet na hoście lokalnym: 'telnet localhost 3306' powinien ustanowić połączenie i wyświetlić rozpoznawalny numer wersji MySQL. –

+0

Miałeś rację zakładając, że miałem zły port. –

+0

Myślę, że ta odpowiedź jest lepsza niż wybrana, ponieważ proponowany sposób pozwala pozostać na komputerze lokalnym, zamiast być zdalnym. –