从 Windows 到 Ubuntu 的反向 SSH 隧道来为 SQL 服务器提供服务

从 Windows 到 Ubuntu 的反向 SSH 隧道来为 SQL 服务器提供服务

正如问题所述,我目前正在尝试从 NAT 后面的 Windows 服务器到托管的 Ubuntu VPS 建立反向 SSH 连接。我几乎是 Linux 和 SSH 的初学者。

我正在使用以下命令从 Windows 机器运行 PLink 连接:

plink.exe -ssh -R 3005:localhost:1433 [email protected] -pw password

在 VPS 上,我已将以下几行添加到 sshd_config:

Match User deploy  
GatewayPorts yes

并重新启动 SSH。Netstat -an | grep 3005 返回以下响应:

tcp        0      0 0.0.0.0:3005            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:3005          127.0.0.1:47578         ESTABLISHED
tcp6       0      0 :::3005                 :::*                    LISTEN
tcp6       0      0 127.0.0.1:47578         127.0.0.1:3005          ESTABLISHED

对我来说,这看起来是对的,但这纯粹是因为我试图解读给出的信息。但我的 ruby​​ webapp(在 Padrino、Mizuno 和 Nginx 上运行)拒绝连接到本地主机上此端口上的 SQL 服务器。我遗漏了什么吗?

希望这些信息足够继续下去。如果还有其他信息,我会尽力提供。

答案1

根据您提供的信息(主要是的输出netstat),看起来您的端口转发没有问题。

您可以通过尝试从 Ubuntu 计算机打开到此端口的连接来确保这一点。尝试以下操作:

telnet localhost 3005

那么你应该属于以下三种情况之一:

  1. 您收到一条消息,telnet: Unable to connect to remote host: Connection refused提示端口转发不起作用,Ubuntu 服务器上的 3005 端口仍然处于关闭状态。

  2. 您收到带有和的消息connect_to localhost port 1433: failed.Connected to localhost.但直接用它关闭Connection closed by foreign host.意味着端口转发正常(第一次连接),但 SQL 服务器上的监听端口不接受连接(第二次连接,即使错误消息首先出现)。

  3. 您收到来自 SQL Server 的邀请,然后连接可能会关闭。如果是这种情况,则意味着端口转发工作正常。但问题在于您的 SQL 服务器或您的应用程序连接它的方式。

我认为你应该在2.或3。

答案2

反向隧道?您是指远程端口转发吗?我认为您正在尝试将本地端口(SQL 服务器正在运行的位置)转发到远程 Ubuntu 服务器。如果是这样,那么您需要改为执行本地端口转发(-L 而不是 -R)

答案3

您无法这样做,因为客户端位于 NAT 路由器后面。如果没有 NAT,您可以使用:

plink -ssh -R 3005:client-ip-addr:1433 deploy@ubuntu-ip-addr -pw passwd

不幸的是,ubuntu 服务器无法访问客户端 IP 地址。也许将端口转发到 sql server host:port 可能会有所帮助,但我想这正是您想要避免的事情。

相关内容