PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Richten Sie einen SSH-Tunnel mit Paramiko ein, um auf PostgreSQL zuzugreifen

Verwenden Sie die SSH-Portweiterleitung.

Ändern des Codes von Verschachteltes SSH mit Python Paramiko für Datenbank-Tunneling erhalten Sie einen Code wie diesen:

# establish SSH tunnel
self.ssh = paramiko.SSHClient()
# ...
self.ssh.connect(hostname=ssh_host, username=ssh_user, password=ssh_password)

transport = ssh_client.get_transport()
dest_addr = (db_host, db_port)
local_unique_port = 4000 # any unused local port
local_host = 'localhost'
local_addr = (local_host, local_unique_port)
vmchannel = vmtransport.open_channel("direct-tcpip", dest_addr, local_addr)

self.engine = create_engine(
    'postgres+psycopg2://{}:{}@{}:{}/{}'.format(
        db_user, db_password, local_host, local_unique_port, db))

Wenn die PostgreSQL-Datenbank auf dem SSH-Server selbst ausgeführt wird, lauscht sie normalerweise nur auf der Loopback-Schnittstelle. In diesem Fall db_host sollte auf localhost gesetzt werden .

Beachten Sie jedoch, dass sshtunnel ist nur ein Wrapper um Paramiko. Im Allgemeinen können Sie es also verwenden, um den Code zu vereinfachen, es sei denn, Sie haben Einschränkungen, die Sie daran hindern, zusätzliche Pakete zu installieren.

Beispiel:Verbindung zur PostgreSQL-Datenbank über SSH-Tunneling in Python

Basierend auf derselben Frage zu MongoDB:
Mongo-Datenbank verbinden und abfragen SSH mit privatem Schlüssel in Python
.

Obligatorische Warnung:Verwenden Sie AutoAddPolicy nicht - Sie verlieren den Schutz vor MITM-Angriffen dadurch. Eine korrekte Lösung finden Sie unter Paramiko "Unknown Server" .