如何使用 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 连接