我有一个networking堡垒,可以在example.compute-1.amazonaws.com
和postgres.example.us-east-1.rds.amazonaws.com:5432上公开访问一个私有的postgres数据库实例
我可以ssh进入堡垒使用
$ ssh -i key.pem [email protected]
然后,一旦我在堡垒,我创build一个SSH隧道:
$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 [email protected]
然后,我可以通过使用localhost连接到堡垒的数据库来validation隧道是否工作:
$ psql -p 5432 -h localhost -U postgres
但是,我无法远程连接到数据库(不在堡垒中)。
$ psql -p 5432 -h example.compute-1.amazonaws.com -U postgres psql: could not connect to server: Connection refused Is the server running on host "example.compute-1.amazonaws.com" () and accepting TCP/IP connections on port 5432?
我已经将堡垒的安全组configuration为接受端口5432上的入站stream量。
我正确使用ssh -L
吗? 我应该在堡垒之外使用它吗? 任何意见将不胜感激。
当您创buildSSH隧道时,它不会将打开的端口暴露给外部世界。 打开的端口只能作为localhost
。 所以你所做的就是创build一个从堡垒到堡垒的隧道。
相反,你想要做的是从你的本地计算机通过堡垒创build一个隧道。
所以,你创build你的隧道作为从本地计算机到堡垒的连接的一部分。 您不需要创build另一个SSH连接。
所以,在本地,你会执行:
$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 [email protected]
假设postgres.example.us-east-1.rds.amazonaws.comparsing为私有IP地址。
然后连接到您的服务器,仍然在本地连接,就好像服务器是本地的:
$ psql -p 5432 -h localhost -U postgres
这样做,没有必要在你的堡垒上使用提示。
这对我有效。 确保你有本地安装的psql客户端 。
psql --host=myAwsDbEndpointUrl.ciqykqusf0nv.us-west-1.rds.amazonaws.com --port=5432 --username=myUserName --password --dbname=myDbName
在aws上创build数据库实例时,确保定义如下:
我还必须为数据库所在的VPC创build安全组。在创build安全组之后,请确保您的数据库实例将其用于其安全组。 安全组有以下规则:
inbound--> type:PostgreSQL, protocol:TCP port range:5432, source:0.0.0.0/0 outbound--> type:All Traffic, protocol:All, port range:all, destination:0.0.0.0/0