2010-11-17 110 views
8

我在Amazon EC2云中的“Amazon Linux”(Centos派生的)32位实例上运行XAMPP 1.7.3a。我下载/建立/安装XDEBUG 2.1.0。在的phpinfo相关项目()的输出是这样的:xdebug通过SSH隧道转发端口9000的远程调试 - 如何使其工作?

Directive       Local Value Master Value 
xdebug.idekey      ECLIPSE_DBGP ECLIPSE_DBGP 
xdebug.default_enable    On   On 
xdebug.remote_autostart   On   On 
xdebug.remote_connect_back  Off   Off 
xdebug.remote_cookie_expire_time 3600   3600 
xdebug.remote_enable    On   On 
xdebug.remote_handler    dbgp   dbgp 
xdebug.remote_host    127.0.0.1 127.0.0.1 
xdebug.remote_mode    req   req 
xdebug.remote_port    9000   9000 
xdebug.remote_log     /opt/lampp/logs/xdebug_log 
               /opt/lampp/logs/xdebug_log 

我从运行XP SP3在Windows笔记本电脑访问Linux机器,使用SSH客户端的PuTTY版本0.60。我在笔记本电脑上安装了Eclipse PDT(Helios服务版本1 Build ID:20100917-0705),我想我已经正确配置了使用端口9000进行XDEBUG远程调试。我说我认为,因为我很难弄清楚如何做到这一点,以及如何在一般情况下使用Eclipse PDT。但是我确实设法配置好它,并且使用端口9000对本地主机(127.0.0.1)上使用XAMPP for Windows 1.7.3提供的网页运行的PHP代码进行“远程”调试。服务器的phpinfo()输出在笔记本电脑,这PDT 能够调试是与上面相同,除了:

xdebug.idekey  my_username  no value 
xdebug.remote_host localhost  localhost 
xdebug.remote_log no value  no value 

我敢肯定,这些差异是不相关的问题。事实上,xdebug.idekey最初是Linux上的“root novalue”,然后我通过编辑php.ini和在启动apache的sudo-ed脚本中设置环境变量DBGP_IDEKEY来更改为ECLIPSE_DBGP,这是徒劳无功希望能够实现的。

我在笔记本电脑和Linux机箱之间有防火墙和NAT路由器。所以我试图通过PuTTY ssh隧道使用端口转发来获取Linux XDEBUG与Windows PDT的通话。我一直在用PuTTY使用X11转发几个月,没有任何问题。我建立在Linux中转发到127.0.0.1端口9000 PuTTY中隧道转发到端口9000在Linux中的本地端口9000和端口9000,腻子隧道面板显示:

L9000 host...amazonaws.com:9000 
R9000 127.0.0.1:9000 

展望在当隧道建立腻子事件日志,似乎有没有问题:

2010-11-16 18:07:59 Local port 9000 forwarding to host...amazonaws.com:9000 
2010-11-16 18:07:59 Requesting remote port 9000 forward to 127.0.0.1:9000 
2010-11-16 18:07:59 Remote port forwarding from 9000 enabled 

但后来当我去PDT并点击指定远程Web服务器的配置调试,PDT显示背景活动在右下角卡住了57%,如果我点击图标进入进度视图,显示“启动:等待XDebug会话”。

发生这种情况时,腻子事件日志显示:

2010-11-16 19:05:42 Received remote port 9000 open request from 127.0.0.1:54474 
2010-11-16 19:05:42 Attempting to forward remote port to 127.0.0.1:9000 
2010-11-16 19:05:42 Forwarded port opened successfully 
2010-11-16 19:05:42 Opening forwarded connection to host...amazonaws.com:9000 
2010-11-16 19:05:42 Forwarded connection refused by server: Connect failed [Connection refused] 
2010-11-16 19:05:42 Forwarded port closed 

在Linux中,在/ var /日志/安全只是表明:

Nov 16 19:01:51 ip-10-194-9-67 sshd[14555]: error: connect_to host...amazonaws.com port 9000: failed. 

我检查了我的/ etc/ssh/sshd_config,我认为没关系,甚至将它明确地改为“AllowTcpForwarding yes”,尽管这应该是默认设置。在一个解决方案我的网页搜索,我没有遇到一个linuxquestions posting在最后答复说,一些非常模糊的关于sshd的需要把主机名解析:

这似乎解决它: 主机名一直域 - 服务,因为我总是 想到我的路由器是domain.com ...所以在运行后 hostname domain.com ...巴姆!它终于有效...

我猜有时它太简单了。 sshd必须解决域名问题。com 到我的路由器,如果连接失败。

我听起来像这可能与我的问题有关,但它对我来说没有意义,而且由于它很老,而且作者似乎也没有理解它,所以我想我会问这里而不是在那里......

我注意到在近一年前的这个论坛中有一个similar question被问到只有一个0值的响应,大概是因为这个问题是如此缺乏细节以至于无法回答。我希望这个人有足够的信息,而且没有那么长时间,所以有人可以引导我。在阅读常见问题以及如何提出问题之后,对于我来说,论坛的正确使用方式是在原始的问题不大但内容相同的问题下张贴某些内容或发布新内容 - 我肯定有人会让我知道什么是正确的选择:-)

我一直坚持这件事情,我怀疑这是有经验的人很明显的东西。我对这些东西(PHP,网络编程,网络管理员和这个论坛)大部分都没有意见,尽管不适用于老式的C编程和用户级Linux和Windows安装。

回答

4

这很尴尬,显然我的端口转发设置只是网络noob会做的事情?我想我已经决定,因为在Web服务器上运行的Xdebug需要与笔记本电脑上的PDT调试器客户端进行通信,并且笔记本电脑上的PDT调试器客户端也需要与服务器上的Xdebug进行通信,并且只有一个端口号(9000),因此我需要将本地端口9000转发到远程端口9000,并将远程端口9000转发到本地端口9000;我混淆了客户端启动(双向)连接到客户端正在监听的特定端口的流量方向。

似乎在发生的事情是笔记本电脑上运行的PDT调试器卡住了等待在Linux上运行的Xdebug进行连接。由于我无法真正想到Xdebug需要监听端口9000的情况,因此需要等待PDT调试器发起连接(而不是等待PDT调试器通过连接发送命令)已经通过它的开放端口9000建立,当它看到请求中的XDEBUG_SESSION参数时),我决定只是摆脱本地端口9000到远程端口9000的转发。我这样做,突然PDT正在接收从Linux服务器发送的连接,并从那里正常进行调试。

但是我脑海中仍然不清楚的是为什么有额外的转发实际上导致了一个问题。对于不同主机上的一对节目来说,是不是有可能根据状态进行操作,有时一个人是听众,有时另一个是?只要转发不会导致它们都试图在同一个端口上同时收听,我希望这样可以。

底线是因为我做了简化,现在事情似乎正在工作,但我想了解为什么不必要的复杂性实际上导致了问题。我读过很多东西,包括对the O'Reilly book中ssh和tunneling的出色解释,但我仍然不明白。

+0

睡眠后,我想我可以看到笔记本电脑端存在问题,因为本地转发引起ssh监听端口9000上的连接。因此,当PDT启动调试配置并开始在端口9000上侦听XDEBUG时,它在同一端口上创建了两个侦听器,这是一个错误。如果发生了这种情况,那么我只是在理解诊断如何反映问题时遇到问题:PuTTY和sshd日志都表明远程端存在问题。为什么PDT在ssh已经在监听时试图听9000? – sootsnoot 2010-11-17 17:37:50

+4

刚刚被同样的问题困扰 - 重要的是要记住,您的IDE充当“服务器”,因为它正在等待端口9000上的PHP Xdebug进程的连接。因此,您需要一个隧道来转发远程服务器的端口9000添加到您的IDE正在侦听的本地机器的端口9000。在Mac上,这是ssh -R 9000:127.0.0.1:9000 [email protected] – 2012-07-29 17:24:54

+0

和哪里可以输入这个ssh命令?它是否会进入netbeans设置? – user658182 2014-09-02 11:30:21