如何通过SSH隧道从本地经远程服务器连接Postgres数据库
解决方法
有两种可行的方案,根据你的实际需求选择:
方案一:直接修改SSH隧道命令(推荐)
不需要依赖remote_server上的9996端口,直接通过SSH隧道把本地端口映射到RDS实例的5432端口,一步到位。把你原来的命令替换成:
ssh -fN -L 9997:<你的RDS实例端点>:5432 ubuntu@remote_server
替换<你的RDS实例端点>为实际的Amazon RDS地址(比如my-db.c123456.us-west-2.rds.amazonaws.com)。这样本地访问localhost:9997就等同于直接访问RDS的5432端口,所有流量通过remote_server中转,完全满足你的访问需求。
方案二:在remote_server上搭建端口转发(保留9996端口)
如果必须通过remote_server的9996端口中转,就在remote_server上用socat工具实现端口转发:
- 先在remote_server上安装socat(如果没装的话):
sudo apt update && sudo apt install socat - 执行转发命令:
这个命令会把remote_server上9996端口收到的所有TCP流量,转发到RDS的5432端口。socat TCP-LISTEN:9996,fork TCP:<你的RDS实例端点>:5432fork参数保证能同时处理多个连接。 - 如果需要让这个转发后台持续运行,加
nohup和&:nohup socat TCP-LISTEN:9996,fork TCP:<你的RDS实例端点>:5432 &
注意事项
- 确保remote_server能正常解析RDS的端点地址,并且网络能连通5432端口(你已经有psql访问权限,这一点应该没问题)
- 如果9996端口是低于1024的特权端口,执行socat需要sudo权限
内容的提问来源于stack exchange,提问作者Snobby
相关产品推荐
相关产品推荐

