查找 ssh 隧道无法正常工作的原因

查找 ssh 隧道无法正常工作的原因

我有一台远程服务器,可以通过 SSH 毫无问题地进入。我在远程服务器(称为“enc”)和本地机器上设置了 PostgreSQL (ps),两者都运行在 5432(默认)。远程服务器不允许来自外部的连接(本地 Web 服务器直接访问它)。

我正在尝试建立一个 SSH 隧道,以便比复制文件、登录服务器并在该端手动运行它们更容易在远程 ps 服务器上运行命令。

我尝试运行以下命令

ssh -N -L 5555:enc:5432 enc

隧道似乎设置正确,但当我尝试使用以下方式连接到远程计算机时

psql -p 5555

它说它不工作

psql: could not connect to server: No such file or directory. Is the server running locally and accepting connections on Unix domain socket "/run/postgresql/.s.PGSQL.5555"?

这是否可能是隧道设置或限制用户权限的问题(我想如果是这种情况的话错误会有所不同)?

答案1

尝试这个:

ssh -N -L 5555:enc:5432 localhost

进而

lsof -i :5555

如果您没有看到任何内容,则说明您的本地机器没有听到任何内容。

答案2

类型

netstat -anp | grep LISTEN | grep "port_number"

在您的服务器上查找服务正在运行的 IP 地址。

如果它是机器的 IP 地址,则必须在 ssh -L 命令中提及该地址,否则如果它是环回地址 (127.0.0.1 - ipv4 或 ::1 - ipv6 ),请在命令中提及该地址。

答案3

事实证明问题出在更远的地方。隧道工作正常,但是尝试连接到 postgres 时必须传递 -h(即使它是针对 localhost 的),否则它将尝试通过 unix 套接字进行连接(错误就在这里),而不是通过 tcp(这是隧道工作的唯一方式)。

相关内容