SSH -L 隧道不再工作

SSH -L 隧道不再工作

运行我的脚本的本地计算机需要访问远程服务器的数据库。上周我可以在本地机器上执行以下操作 ssh -f -N -T -L1081:localhost:3306 ueser@remoteserver -p2222

# netstat -an | egrep "tcp.*:1081.*"
tcp        0      0 127.0.0.1:1081          0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:1081                :::*                    LISTEN

然后告诉我的脚本使用端口 1081 进行 mysql 连接就成功了。这个 netstat 命令显示我在本地接受连接正常,但在远程计算机上进行相同的检查,实际 mysql 服务器根本没有侦听 1081,以前情况并非如此

我检查了 sshd_config ,它似乎允许隧道,即没有配置更改。我还尝试打开到网络上另一台服务器的隧道,但这也不起作用,我的命令是垃圾还是什么?尝试了各种组合 -f -T

答案1

我画了一些草图

键入 ssh 隧道命令的机器称为»你的主人«

从本地开始的 ssh 隧道


从远程开始的 ssh 隧道

介绍

  1. 当地的:-L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.

    ssh -L sourcePort:forwardToHost:onPort connectToHost表示:使用 ssh 连接到connectToHost,并将所有连接尝试转发到当地的 sourcePortonPort到名为 的计算机上的端口forwardToHost,可以从该connectToHost计算机访问该端口。

  2. 偏僻的:-R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.

    ssh -R sourcePort:forwardToHost:onPort connectToHost表示:使用 ssh 连接到connectToHost,并将所有连接尝试转发到偏僻的 sourcePortonPort到名为 的计算机上的端口forwardToHost,可以从本地计算机访问该计算机。

其他选项

  • -f告诉 ssh 在进行身份验证后自行后台运行,因此您不必在远程服务器上运行某些东西来使隧道保持活动状态。
  • -N表示您想要 SSH 连接,但实际上不想运行任何远程命令。如果您创建的只是一条隧道,那么包含此选项可以节省资源。
  • -T禁用伪 tty 分配,这是合适的,因为您不尝试创建交互式 shell。

你的例子

第一张图片代表您的情况。如果你这样做

ssh -L 1081:localhost:3306 remotehost

所有到绿色端口的连接尝试都1081通过 ssh 隧道转发到3306远程主机的本地主机上的粉色端口,即远程主机本身。

现在您的 php 脚本可以通过localhost:1081.但是netstat你的命令remotehost找不到任何在 1081 监听的东西(至少不是隧道的结果)。因为粉红色的端口不是ssh创建的监听端口,而是转发的目标。并且它不是转发到端口1081而是转发到3306

您的数据库服务器是否真正在端口上侦听3306或可能在端口上侦听1081?如果后者为真,那么您的命令应该更改为如下所示:

ssh -L 1081:localhost:1081 remotehost

如果您的数据库侦听端口,1081您应该使用 netstat (独立于 ssh)找到它。

答案2

您不会期望远程端侦听端口 1081。您要求隧道连接到远程端的端口 3306,这是 mysql 的默认端口。可能值得检查它是否确实正在侦听该端口。或者,如果您确实想在两侧使用端口 1081,请将您的-L选项替换为-L1081:localhost:1081.

相关内容