sql >> Database >  >> RDS >> PostgreSQL

Stel SSH-tunnel in met Paramiko om toegang te krijgen tot PostgreSQL

Gebruik SSH-poort doorsturen.

De code wijzigen van Nested SSH met Python Paramiko voor database-tunneling krijg je een code als deze:

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

Als de PostgreSQL-database op de SSH-server zelf draait, luistert deze doorgaans alleen op de loopback-interface. In dat geval db_host moet worden ingesteld op localhost .

Houd er echter rekening mee dat sshtunnel is slechts een wikkel rond Paramiko. Dus over het algemeen kun je het gebruiken om de code te vereenvoudigen, tenzij je beperkingen hebt waardoor je geen extra pakketten kunt installeren.

Bijvoorbeeld:Verbinding maken met PostgreSQL-database via SSH-tunneling in Python

Gebaseerd op dezelfde vraag over MongoDB:
Verbind en bevraag Mongo-database via SSH met privésleutel in Python
.

Verplichte waarschuwing:gebruik AutoAddPolicy niet - U verliest een bescherming tegen MITM-aanvallen door het zo te doen. Voor een juiste oplossing, zie Paramiko "Unknown Server" .




  1. Groeperen op ID behalve de NULL-records

  2. Een inleiding tot MySQL-implementatie met behulp van een Ansible-rol

  3. MySQL hoofdletterongevoelig zoeken op varbinary veld?

  4. Het Hadoop Input Output System begrijpen