如何使用 python 通过 ssh 连接 aws postgres db

Posted

技术标签:

【中文标题】如何使用 python 通过 ssh 连接 aws postgres db【英文标题】:How to connect aws postgres db over the ssh using python 【发布时间】:2021-08-23 07:26:09 【问题描述】:

我在 AWS 上有一个 Postgres 数据库,目前我们通过提供以下信息使用 postico 客户端连接它 - 数据库主机 数据库端口 数据库用户名 数据库密码 数据库名称 SSH 主机(它是域) SSH 端口 SSH 私钥 在此期间,我使用了我的组织 ***。但是现在我必须用 python 代码连接它,我相信当我可以用 postico 连接时,我也应该通过代码。我使用了下面的代码,但无法连接到数据库并获取记录,所以任何人都可以提供想法或示例代码?-

def __init__(self, pgres_host, pgres_port, db, ssh, ssh_user, ssh_host, ssh_pkey):
        # SSH Tunnel Variables
        self.pgres_host = pgres_host
        self.pgres_port = pgres_port
        
        if ssh == True:
            self.server = SSHTunnelForwarder(
                (ssh_host, 22),
                ssh_username=ssh_user,
                ssh_private_key=ssh_pkey,
                remote_bind_address=(pgres_host, pgres_port),
            )
            server = self.server
            server.start() #start ssh server
            self.local_port = server.local_bind_port
            
            print(f'Server connected via SSH || Local Port: self.local_port...')
        elif ssh == False:
            pass

def query(self, db, query, psql_user, psql_pass):
        engine = create_engine(f'postgresql://psql_user:psql_pass@self.pgres_host:self.local_port/db')
        print (f'Database [db] session created...')
        print(f'host [self.pgres_host]')
        self.query_df = pd.read_sql(query,engine)
        print ('<> Query Sucessful <>')
        engine.dispose()
        return self.query_df

pgres = Postgresql_connect(pgres_host=p_host, pgres_port=p_port, db=db, ssh=ssh, ssh_user=ssh_user, ssh_host=ssh_host, ssh_pkey=ssh_pkey)
print(ssh_pkey)
query_df = pgres.query(db=db, query='Select * from table', psql_user=user, psql_pass=password)
print(query_df)

【问题讨论】:

你得到什么错误? @jjanes 超时错误 【参考方案1】:

在创建 ssh 隧道后就像在本地连接一样

https://www.howtogeek.com/168145/how-to-use-ssh-tunneling/

【讨论】:

以上是关于如何使用 python 通过 ssh 连接 aws postgres db的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 AWS Session Manager 工作获得 SSH 连接

DBeaver 通过 SSH 隧道连接

通过 SSH 端口转发连接到 AWS

[AWS][计算]AWS EC2 SSH连接错误排查

如何使用 ppk 公钥通过 python Paramiko 进行 ssh 连接

如何使用 ssh 隧道将谷歌数据工作室连接到 AWS 上的 postgres 无服务器?