gpt4 book ai didi

python - 使用 Paramiko 设置 SSH 隧道以访问 PostgreSQL

转载 作者:行者123 更新时间:2023-12-02 14:26:17 25 4
gpt4 key购买 nike

我目前使用 Paramiko 访问 SFTP 服务器并连接到同一服务器上的 PostgreSQL。我发现了许多使用 sshtunnel 的示例登录 PostgreSQL。但我不知道如何用纯 Paramiko 做到这一点。
目前我的代码看起来像:

# establish SSH tunnel
self.ssh = paramiko.SSHClient()
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.ssh.connect(hostname=host, username=user, password=password)

# setup SFTP server
self.sftp = self.ssh.open_sftp()

# connect to datebase
self.engine = create_engine('postgres+psycopg2://{}:{}@{}:{}/{}'.format(user, password, host, port, db))
感谢您的任何建议!

最佳答案

使用 SSH 端口转发。
Nested SSH using Python Paramiko 修改代码对于数据库隧道,您会得到如下代码:

# 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))
如果 PostgreSQL 数据库在 SSH 服务器本身上运行,那么它通常只会在环回接口(interface)上监听。在那种情况下 db_host应设置为 localhost .

虽然请注意 sshtunnel 只是 Paramiko 的包装。所以一般来说,你可以用它来简化代码,除非你有一些限制阻止你安装额外的包。
例如: Connecting to PostgreSQL database through SSH tunneling in Python

基于关于 MongoDB 的相同问题:
Connect and query Mongo database over SSH with private key in Python .

强制警告:请勿使用 AutoAddPolicy - 您正在失去对 MITM attacks 的保护通过这样做。有关正确的解决方案,请参阅 Paramiko "Unknown Server" .

关于python - 使用 Paramiko 设置 SSH 隧道以访问 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64291009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com