sql >> Databasteknik >  >> RDS >> PostgreSQL

Ställ in SSH-tunneln med Paramiko för att komma åt PostgreSQL

Använd SSH-portvidarebefordran.

Ändra koden från Inkapslade SSH med Python Paramiko för databastunnelering får du en kod så här:

# 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))

Om PostgreSQL-databasen körs på själva SSH-servern, lyssnar den vanligtvis endast på loopback-gränssnittet. I så fall db_host bör ställas in på localhost .

Observera dock att sshtunnel är bara ett omslag runt Paramiko. Så i allmänhet kan du använda den för att förenkla koden, såvida du inte har några begränsningar som hindrar dig från att installera ytterligare paket.

Till exempel:Ansluta till PostgreSQL-databasen genom SSH-tunnling i Python

Baserat på samma fråga om MongoDB:
Anslut och fråga Mongo-databasen över SSH med privat nyckel i Python
.

Obligatorisk varning:Använd inte AutoAddPolicy - Du förlorar skyddet mot MITM-attacker genom att göra så. För en korrekt lösning, se Paramiko "Okänd server" .




  1. Refaktorera främmande nyckel till fält

  2. Använder LENGTH (beräknad kolumn) i ORDER BY i Postgres sql

  3. Hur man byter namn på en tabell i Microsoft Access

  4. PostgreSQL:databasåterställning från dump - syntaxfel