2016-11-04 4 views
1

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?

+0

'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

+0

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

Antwort

0

Mögliche Gründe, warum ich nach einiger Googeln herausfinden konnte, sind nachfolgend aufgeführt:

  1. Nicht sicher, es durch _get_local_interfaces verursacht wurde versucht, den lokalen Hostnamen zu lösen und Fehler (wahrscheinlich nur eine schlechte/etc/hosts-Datei oder etwas)

Versuche als root /etc/hosts Datei zu öffnen, und fügen Sie eine Zeile wie die folgenden

# IP ADDR  HOSTNAME 
192.168.1.1 your_desired_hostname 

und der Name sollte auflösen. aktualisieren Sie 192.168.1.1 mit Ihrer IP-Adresse. Here

  1. Eine andere Lösung: Ersetzen:

local_if = socket.gethostbyname_ex(socket.gethostname())[-1]

mit

try: 
    local_if = socket.gethostbyname_ex(socket.gethostname())[-1] 
except: 
    local_if = [] 

Here

Verwandte Themen