使用 Python Paramiko 通过双 SSH 隧道连接到数据库
Posted
技术标签:
【中文标题】使用 Python Paramiko 通过双 SSH 隧道连接到数据库【英文标题】:Connect to database through double SSH tunnel using Python Paramiko 【发布时间】:2021-09-27 16:00:39 【问题描述】:这是我的ssh
命令,它通过堡垒主机代理与 Postgres 数据库建立隧道 -
ssh -i C:/public/keys/my_key.pem -o "ProxyCommand ssh -W %h:%p username1@bastion_host.com" username2@ssh_host_ip -N -L 12345:postgres_host.com:5432 ssh_host_ip
我想使用sshtunnel
实用程序将其转换为 Python 脚本。但是很难弄清楚在所描述的实用程序中传递什么:
我在 Stack Overflow 上浏览了几篇文章,但没有看到直接的方法。开发人员正在使用代理转发作为代理命令的解决方案。将上述命令直接转换为 sshtunnel
或 Paramiko 或任何其他 Python 方式都会非常有帮助。
【问题讨论】:
【参考方案1】:基于Connecting to PostgreSQL database through SSH tunneling in Python,应该做以下事情:
with SSHTunnelForwarder(
'bastion_host',
ssh_username="username1", ssh_password="password1",
remote_bind_address=('ssh_host_ip', 22)) as bastion:
bastion.start()
with SSHTunnelForwarder(
('127.0.0.1', bastion.local_bind_port),
ssh_username="username2", ssh_pkey="C:/public/keys/my_key.pem",
remote_bind_address=('postgres_host', 5432)) as ssh:
ssh.start()
engine = create_engine(
'postgresql://<db_username>:<db_password>@127.0.0.1:' +
str(ssh.local_bind_port) + '/database_name')
【讨论】:
以上是关于使用 Python Paramiko 通过双 SSH 隧道连接到数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ppk 公钥通过 python Paramiko 进行 ssh 连接