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"
.