Verbinden mit entfernter Postgresql-Datenbank über ssh-Tunnel mit Python

Ich habe ein Problem mit der Verbindung zu einer entfernten Datenbank mit ssh Tunnel (jetzt versuche ich mit paramiko). Hier ist mein Code:

#!/usr/bin/env python3 import psycopg2 import paramiko import time #ssh = paramiko.SSHClient() #ssh.load_system_host_keys() #ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #ssh.connect('pluton.kt.agh.edu.pl', 22, username='aburban', password='pass') t = paramiko.Transport(('pluton.kt.agh.edu.pl', 22)) t.connect(username="aburban", password='pass') c = paramiko.Channel(t) conn = psycopg2.connect(database="dotest") curs = conn.cursor() sql = "select * from tabelka" curs.execute(sql) rows = curs.fetchall() print(rows) 

Ein Problem ist, dass das Programm immer versucht, eine Verbindung zur lokalen Datenbank herzustellen. Ich habe versucht mit anderen ssh Tunnels und es war die gleiche Situation. Datenbank auf Remote-Server existiert und funktioniert gut mit "klassischen" ssh-Verbindung über Terminal.

  • Paramiko-Kanal steckt beim Lesen großer Ouput
  • Wie man einen entfernten Pfad überprüft, ist eine Datei oder ein Verzeichnis?
  • Paramiko "Ungültiger Befehl" beim Versuch von Nicht-Standard-Befehl für Vyatta
  • Paramiko unter Windows installieren
  • Python paramiko logging messes up stfp verbindung
  • Paramiko Inkompatibler ssh Peer (kein akzeptabler Kex-Algorithmus)
  • Was ist der richtige Weg, um Pip, virtualenv zu installieren und für Python zu verteilen?
  • Setuptools kann keinen Link von dependency_links verwenden
  • Wie unterscheiden sich Setuptools, Distribution und Pip aufeinander?
  • Wie kann ich setuptools (oder verteilen) ein Paket aus dem lokalen Dateisystem installieren
  • Verteilen / distutils spezifizieren Python-Version
  • Wie schreibe ich ein setup.py für ein Twistd / Twisted Plugin, das mit setuptools arbeitet, verteilen, etc?
  • One Solution collect form web for “Verbinden mit entfernter Postgresql-Datenbank über ssh-Tunnel mit Python”

    Sie können versuchen, mit sshtunnel, die paramiko und seine python3 kompatibel verwendet.

    Hoffentlich hilft es dir … ich kratzte mir den Kopf für eine Weile zu, um es in Python-Code zu tun und ssh externe Tunnel zu vermeiden, müssen wir den Entwicklern danken, die komplexe Bibliotheken in einfachen Code umwickeln !!

    Wird einfach sein, einen Tunnel zu Port 5432 in localhost von Remote-Server von einem lokalen Port generieren, dann verwenden Sie es, um über localhost an die Remote-DB zu verbinden.

    Dies wird ein Beispiel Arbeitscode für Ihre Bedürfnisse:

     #!/usr/bin/env python3 import psycopg2 from sshtunnel import SSHTunnelForwarder import time with SSHTunnelForwarder( ('pluton.kt.agh.edu.pl', 22), ssh_password="password", ssh_username="aburban", remote_bind_address=('127.0.0.1', 5432)) as server: conn = psycopg2.connect(database="dotest",port=server.local_bind_port) curs = conn.cursor() sql = "select * from tabelka" curs.execute(sql) rows = curs.fetchall() print(rows) 
    Python ist die beste Programmiersprache der Welt.