sql >> Database teknologi >  >> RDS >> PostgreSQL

Opsæt SSH-tunnel med Paramiko for at få adgang til PostgreSQL

Brug SSH-portvideresendelse.

Ændring af koden fra Indlejret SSH ved hjælp af Python Paramiko til databasetunneling får du en kode som denne:

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

Hvis PostgreSQL-databasen kører på selve SSH-serveren, vil den typisk kun lytte på loopback-grænsefladen. I så fald db_host skal indstilles til localhost .

Bemærk dog, at sshtunnel er blot en indpakning omkring Paramiko. Så generelt kan du bruge det til at forenkle koden, medmindre du har nogle begrænsninger, der forhindrer dig i at installere yderligere pakker.

For eksempel:Opretter forbindelse til PostgreSQL-databasen via SSH-tunneling i Python

Baseret på det samme spørgsmål om MongoDB:
Opret forbindelse og forespørg Mongo-database over SSH med privat nøgle i Python
.

Obligatorisk advarsel:Brug ikke AutoAddPolicy - Du mister en beskyttelse mod MITM-angreb ved at gøre det. For en korrekt løsning, se Paramiko "Ukendt server" .




  1. Hvordan kan jeg oprette en kolonne i postgres ud fra værdier og valg baseret på andre kolonner?

  2. Kolonnenavn gentages i forespørgselsresultater

  3. Den enkleste en-til-mange Map-case i Hibernate virker ikke i MySQL

  4. SQL Stored Procedures afsluttes ikke, når de kaldes fra Python