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 und Crypto Import Fehler: import winrandom (python)
  • Paramiko-Kanal steckt beim Lesen großer Ouput
  • Python - Paramiko - inkompatibler ssh Server
  • Nicht in der Lage, auf den gewünschten Ordner auf Remote-Linux-Maschine zu navigieren, wie mache ich das mit paramiko?
  • Paramiko unter Windows installieren
  • Paramiko: Piping Blöcke für immer auf lesen
  • Setuptools kann keinen Link von dependency_links verwenden
  • Wie kann ich setuptools (oder verteilen) ein Paket aus dem lokalen Dateisystem installieren
  • Was ist der richtige Weg, um Pip, virtualenv zu installieren und für Python zu verteilen?
  • Wie unterscheiden sich Setuptools, Distribution und Pip aufeinander?
  • Wie schreibe ich ein setup.py für ein Twistd / Twisted Plugin, das mit setuptools arbeitet, verteilen, etc?
  • Verteilen / distutils spezifizieren Python-Version
  • 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.