Ich versuche pymysql
und sshtunnel
in Python2.7 zu tunneln meine Verbindung, so dass ich eine Verbindung zu einer MySQL-Instanz herstellen kann, die nur über einen Bastion-Server zugänglich ist. Der Bastion-Server hat einen Host-Namen von BASTIONIP
und dieser Server kann problemlos eine Verbindung zu MYSQLHOST
herstellen. Python scheint sich jedoch nicht über den Tunnel zu verbinden. Unten ist mein Code:Verwenden von SSHTunnel Korrekt
with sshtunnel.SSHTunnelForwarder(
(BASTIONIP, 22),
ssh_username='dataengineer',
ssh_pkey="/Users/USERNAME/.ssh/id_rsa",
remote_bind_address=(MYSQLHOST, 3306),
local_bind_address=(MYSQLHOST, 3306)
) as tunnel:
self.DB = {'con': pymysql.connect(host=MYSQLHOST,
user=USERNAME,
passwd=PASSWORD,
db=DBNAME,
port=tunnel.local_bind_port,
charset='utf8',
autocommit=True)}
self.DB['cursor'] = self.DB['con'].cursor(pymysql.cursors.DictCursor)
Allerdings, wenn ich versuche, eine Verbindung ich die folgende Fehlermeldung erhalten:
File "/Library/Python/2.7/site-packages/sshtunnel.py", line 1378, in _get_local_interfaces
local_if = socket.gethostbyname_ex(socket.gethostname())[-1]
gaierror: [Errno 8] nodename nor servname provided, or not known
jemand kann darauf hinweisen, was ich falsch mache?
'local_bind_address' ist auf Ihrem co mputer nicht auf dem mysql server, versuche es auf localhost zu setzen: 'local_bind_address = ('localhost', 3306)' oder 'local_bind_address = ('127.0.0.1', 3306)' – Dalvenjia
Ich bekomme den gleichen Fehler, wenn ich versuche, zu ändern die 'local_bind_address' zu' localhost', '127.0.0.1' oder' 0.0.0.0'. Beachten Sie, dass dies in einer Django-App ausgeführt wird, die auf '0.0.0.0: 8080' läuft – user2694306