解释SSH隧道过程和限制(对于远程Xdebug会话)

时间:2015-10-29 20:53:17

标签: sockets ssh ssh-tunnel

序言

我在防火墙后面的工作中启动我的本地SSH终端,并且一直连接到远程服务器而没有任何问题。

Xdebug的工作方式,纠正我,如果我错了,是它发送了一个"未经请求的"请求到我的网络端口9000.我实际上是通过我的浏览器向远程服务器发送HTTP请求并使用POST / GET / COOKIE变量指示xdebug启动来启动该操作。但我的网络并不知道。它只知道它是从互联网上获得9000端口的请求。它不知道其专用网络中的哪台计算机将其转发到(没有在路由器上设置端口转发),并且只能忽略该请求。

因此,如果您无法进行端口转发,那么另一种选择(以及我能说的更好)是SSH隧道。我的计算机发送SSH请求,服务器响应。我的路由器知道其网络中的哪台计算机将这些响应路由到。捎带SSH连接允许那些"主动提供的#34;从远程服务器端口9000请求到我这里。

我想我明白了很多。

由于stackoverflow,我终于得到了隧道工作,但它的工作原理对我来说仍然模糊。

在远程服务器上,我告诉Xdebug连接到localhost(不是到我的ip通过xdebug.remote_host=173.123.45.56,而不是xdebug.remote_connect_back=1在端口9000上也会最终在我的IP上。连接到localhost似乎有点奇怪,因为我认为当服务器将消息发送到自己的IP地址时,好像它正在向自己发送消息(但我认为连接到localhost可能与连接到任何其他IP有根本的不同......我不认为邮件会被路由出来并返回localhost)。

在我工作的计算机上,我在端口22上打开一个SSH连接,指定一个到/在端口9000上的隧道,以及远程端口9000.我在这里看到了对各种设置的一些解释,但仍然没有&# 39;理解他们。有些甚至似乎涉及三台机器。然而,似乎正在发生的事情是我通过端口22像往常一样连接,但是我告诉远程机器我想要接收它的端口9000通信。我已指定" localhost"在我的隧道中,我想可能需要匹配localhost值中的xdebug.remote_host。我想知道我是否在两个地方都指定了我的IP地址(即远程服务器上的xdebug.remote_host=173.123.45.56,以及我的SSH终端中的相同IP),这样也可以吗?

因此远程服务器上的Xdebug向我发送启动调试会话的请求。它来自我的端口22,但我的SSH隧道以某种方式使它看起来它在9000端口进入。所以我的IDE正在侦听端口9000接收请求并发送响应(也在9000),我的SSH隧道以某种方式拦截并发送回端口22上的远程服务器,在那里它同样被欺骗到看起来像端口9000到xdebug。

The Crux

所以我真正不清楚的是,我的SSH隧道配置中的localhost究竟是指什么?它是否与xdebug.remote_host=localhost值直接相关?我可以将它们更改为我的IP地址吗?

端口9000上的所有远程服务器的传出通信是否都转发给我,或只是其中一些?例如,如果查塔努加有人在他们的浏览器中启动调试会话,我会收到Xdebug的回复吗?

我在端口9000上的所有传出通信是否都转发到该服务器?即我可以同时在两个不同的服务器上调试两个应用程序,我的一些端口9000通信是单向的,另一个是另一个,或者我是否需要每个本地应用程序一个端口? (例如,我可以在端口80上同时使用谷歌浏览器和Firefox浏览器。)

1 个答案:

答案 0 :(得分:0)

隧道由一个SSHD监听端口9000(以及22),另一端是SSHD监听端口22。当您将XDebug连接到本地9000时,SSHD进行相互通信,远程SSHD连接到远程端口9000。此后,本地端口9000的行为与远程端口9000完全相同:写入任一端的所有数据都出现在另一端。