正如问题所述,我目前正试图build立一个从NAT后面的Windows服务器到托pipeUbuntu 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服务器。 我错过了什么吗?
希望这是足够的信息继续下去。 如果还有其他事情,我会尽力提供。
从你提供的信息(主要是netstat的输出),看起来你的端口转发是好的。
你可以通过尝试从Ubuntu机器打开到这个端口的连接来保证。 尝试像这样:
telnet localhost 3005
那么你应该陷入这三种情况之一:
您会收到一条消息,指出telnet: Unable to connect to remote host: Connection refused这意味着端口转发不工作,端口3005仍然在Ubuntu服务器上closures。
你用connect_to localhost port 1433: failed.得到消息connect_to localhost port 1433: failed. 并Connected to localhost. 但直接closures与Connection closed by foreign host.closures的Connection closed by foreign host. 这意味着端口转发是正常的(第一次连接),但是您的SQL服务器上的监听端口不接受连接(即使首先出现错误消息,第二次连接也是如此)。
你得到一个来自SQL Server的邀请,然后可能closures连接。 如果是这样的话,这意味着端口转发工作正常。 但问题在于你的SQL服务器或者你的应用程序连接到它的方式。
我想你应该在2或3。
反向隧道? 你的意思是远程端口转发? 我想你正试图转发本地端口(SQL服务器正在运行)到远程Ubuntu服务器。 如果是这样,那么你需要做一个本地端口转发(-L而不是-R)
你不能这样做,因为客户端在NAT路由器后面。 如果没有NAT,可以使用:
plink -ssh -R 3005:client-ip-addr:1433 deploy@ubuntu-ip-addr -pw passwd
不幸的是,Ubuntu的服务器无法到达客户端的IP地址。 也许端口转发到SQL Server主机:端口可以帮助,但我想这正是你想要避免的事情。