首页 > 解决方案 > 如何使用 python 通过 ssh 连接 aws postgres db

问题描述

我在 AWS 上有一个 Postgres 数据库,目前我们通过提供以下信息使用 postico 客户端连接它 - DB 主机 DB 端口 DB 用户名 DB 密码 DB 名称 SSH 主机(它是域) SSH 端口 SSH 私钥 在此期间,我习惯了我的组织 VPN。但是现在我必须用 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)

标签: postgresqlamazon-web-servicesssh-tunnel

解决方案


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

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


推荐阅读