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.

  • Wie kann ich einen SSH-Tunnel mit Python öffnen?
  • PyCharm: Konfigurieren von Multi-Hop-Remote-Interpretern über SSH
  • Wie man multihop ssh mit Stoff macht
  • Wie kann ich MySQL-Datenbank mit Python + SQLAlchemy remote verbinden?
  • 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.