远程PostgreSQL数据库SSH反向端口转发后本地端口无响应问题求助
问题排查与解决方案
1 核心错误:端口转发类型与参数顺序错误
你当前使用的-R参数是远程端口转发,完全不符合「本地访问远程PostgreSQL服务」的需求,且参数顺序完全写反:
你执行的
ssh -R 5432:127.0.0.1:12345 user@remote_ip实际作用是:将远程服务器的5432端口流量转发到你本地机器的12345端口,仅能实现远程侧访问本地服务的效果,和你的需求完全相反。
2 正确的端口转发配置
你需要使用本地端口转发参数-L,命令格式如下:
ssh -L 本地监听端口:PostgreSQL监听IP:PostgreSQL监听端口 user@远程服务器IP
对应你的场景,要实现本地12345端口访问远程PostgreSQL(默认监听在远程服务器本地回环的5432端口),执行如下命令即可:
ssh -N -L 12345:127.0.0.1:5432 user@remote_ip
参数说明:
-N:不执行远程Shell命令,仅做端口转发,降低资源占用12345:你本地要用来连接PostgreSQL的端口- 第一个
127.0.0.1:是从远程服务器视角的回环地址,也就是远程服务器自己 5432:远程PostgreSQL默认监听的端口
3 其他可能的异常排查
如果执行正确命令后仍无法连接,按如下顺序排查:
- 检查远程PostgreSQL监听地址:如果你的远程PostgreSQL没有监听127.0.0.1,需要将命令中的
127.0.0.1替换为PG实际监听的IP - 检查远程SSH服务配置:查看远程服务器
/etc/ssh/sshd_config文件中的AllowTcpForwarding配置项是否为yes,修改后需执行systemctl restart sshd生效 - 检查本地端口占用:执行
lsof -i:12345确认本地12345端口没有被其他进程占用,如有占用可更换为其他空闲端口 - 连接时确认端口参数:比如使用psql连接时需显式指定端口,示例:
psql -h 127.0.0.1 -p 12345 -U PG用户名
内容的提问来源于stack exchange,提问作者dc-mpo
相关产品推荐
相关产品推荐

