PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Configurer le tunnel SSH avec Paramiko pour accéder à PostgreSQL

Utilisez le transfert de port SSH.

Modification du code de SSH imbriqué à l'aide de Python Paramiko pour le tunneling de la base de données, vous obtenez un code comme celui-ci :

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

Si la base de données PostgreSQL s'exécute sur le serveur SSH lui-même, elle n'écoutera généralement que sur l'interface de bouclage. Dans ce cas db_host doit être défini sur localhost .

Cependant, notez que sshtunnel n'est qu'un emballage autour de Paramiko. Donc, en général, vous pouvez l'utiliser pour simplifier le code, sauf si vous avez des restrictions vous empêchant d'installer des packages supplémentaires.

Par exemple :Connexion à la base de données PostgreSQL via le tunnel SSH en Python

Basé sur la même question à propos de MongoDB :
Se connecter et interroger la base de données Mongo sur SSH avec clé privée en Python
.

Avertissement obligatoire :ne pas utiliser AutoAddPolicy - Vous perdez une protection contre les les attaques MITM en faisant cela. Pour une solution correcte, voir Paramiko "Unknown Server" .