我有一个在普通 AWS Linux EC2 实例上运行的服务。后端是 postgresql,默认情况下不暴露于外部世界。该实例通过 HTTPS 公开,仅用于前端服务的 Web 访问。
我想时不时地使用客户端远程连接到该数据库以进行调试和维护。打开的步骤是什么?
我想也许可以执行以下步骤?
谢谢
我没有尝试过任何东西,因为我搜索但找不到任何教程。
最安全的选择是让您的 Postgres 数据库无法通过互联网访问。
要连接到它,请使用 SSH 端口转发 将您的本地计算机连接到 EC2 实例。
您可以使用以下方式连接到实例:
ssh -i key.pem -L 5000:localhost:5432 ec2-user@IP-ADDRESS
这会将本地端口 5000(您可以选择任何数字)重定向到 EC2 实例,并从该实例连接到
localhost:5432
,这是运行 Postgres 数据库的地方。
您的本地 SQL 客户端可以通过
localhost:5000
连接到它,这将通过隧道转发流量。流量“看起来”来自 EC2 实例本身,因此您的数据库应该接受该流量。
根据您的回复,您需要做两件事
首先确保您的防火墙已打开,以便您可以从笔记本电脑访问 Postgres 服务(默认端口 5432)。
Postgres 服务内部有一个额外的防火墙。如果您可以从 EC2 实例内连接到它,“show hba_file”将告诉您该文件位置(在我的情况下,它是默认位置)。请参阅 doc 了解其作用
hba_文件
/var/lib/postgresql/data/pg_hba.conf
编辑
postgresql.conf
:
sudo nano /etc/postgresql/{version}/main/postgresql.conf
listen_addresses
以允许外部连接:
listen_addresses = '*'
编辑
pg_hba.conf
:
sudo nano /etc/postgresql/{version}/main/pg_hba.conf
your_ip
替换为您的实际 IP):
host all all your_ip/32 md5
重新启动 PostgreSQL:
sudo systemctl restart postgresql
5432
上的流量 (PostgreSQL):
your_ip/32
)。规则类型 | 协议 | 端口范围 | 来源 | 描述 |
---|---|---|---|---|
入境 | TCP | 5432 | 你的_ip/32 | 允许从您的 IP 访问 PostgreSQL |
入境 | TCP | 5432 | 0.0.0.0/0 | 允许从任何IP访问PostgreSQL |
在远程计算机上,使用以下命令:
psql -h ec2-your-instance-ip -U your_username -d your_database
如果您希望安全连接而不暴露数据库,可以使用 SSH 隧道:
建立 SSH 隧道: 打开终端并运行以下命令,替换占位符:
ssh -i your-key.pem -L 5432:localhost:5432 ubuntu@your-ec2-public-ip
-i your-key.pem
:SSH 密钥的路径。-L 5432:localhost:5432
:创建从本地端口 5432 到 EC2 实例上的 PostgreSQL 服务器的隧道。ubuntu@your-ec2-public-ip
:您的 EC2 实例的 SSH 用户和公共 IP。连接到 PostgreSQL: 在新的终端窗口中,使用以下命令进行连接:
psql -h localhost -U your_username -d your_database
虽然 SSH 隧道提供了一种连接到 PostgreSQL 服务器的安全方法,但它通常不适合需要自动连接的应用程序。对于这些情况,请考虑在安全组设置中允许特定 IP 访问或使用 VPN 进行安全连接。
确保两个 PostgreSQL 配置文件都允许外部连接,并且您的 EC2 安全组允许端口 5432 上的入站流量。完成这些步骤后,您应该能够从任何地方连接到 PostgreSQL 服务器。