通过带python的bastion服务器到AWS私有数据库的双SSH隧道

通过带python的bastion服务器到AWS私有数据库的双SSH隧道,python,postgresql,amazon-web-services,sqlalchemy,Python,Postgresql,Amazon Web Services,Sqlalchemy,我正在尝试访问连接到私有linux实例的私有Postgres数据库。当我通过终端访问它时,我必须首先SSH到bastion实例,然后使用相同的PEM文件SSH到私有linux实例中,从那里我可以访问数据库。我希望通过python使用sqlalchemy访问这个数据库。我读过关于SSH端口转发的文章,但遇到了问题。我已经找到了这个例子,但我不清楚在哪里输入私有实例的地址,我尝试在远程绑定地址中使用该地址,但这引发了错误 could not translate host name to addres

我正在尝试访问连接到私有linux实例的私有Postgres数据库。当我通过终端访问它时,我必须首先SSH到bastion实例,然后使用相同的PEM文件SSH到私有linux实例中,从那里我可以访问数据库。我希望通过python使用sqlalchemy访问这个数据库。我读过关于SSH端口转发的文章,但遇到了问题。我已经找到了这个例子,但我不清楚在哪里输入私有实例的地址,我尝试在远程绑定地址中使用该地址,但这引发了错误

could not translate host name to address

谢谢你的链接。但是,在我的例子中,我需要SSH->bastian server-->SSH-->private server->database。所以,在我看来,我还有一个额外的步骤,我不知道如何合并。是的,端口转发只能帮助“两跳”,而不是“三跳”。为什么你不能从堡垒连接到数据库?专用服务器将托管我的应用程序,它将与数据库通信,但我只需要本地访问进行开发。目前,bastion服务器没有与数据库的连接。我想我可以试着调查一下。我最近发现了这个:。但我不明白设置~/.ssh/config如何影响ssh python脚本,但我认为答案就在这里。我注意到您的postgres url包含
us wesr-
,应该是
us west-
--打字错误?
with SSHTunnelForwarder(
        ('xxx-x-xx-xx-xxx.us-west-2.compute.amazonaws.com'), """bastian server"""
        ssh_username="buntu",
        ssh_pkey="fourmm.pem",
        remote_bind_address=('Address of private instance?', 22)
) as tunnel:
    print("****SSH Tunnel Established****")
    engine = create_engine(
        "postgresql://postgres:XXXXXXXxxxxxxx@xxxx-xx.cluster-xxxxxx.us-wesr-.rds.amazonaws.com:5432/postgres",
        echo=True, future=True)