PhpStorm ssh隧道到远程服务器 - 在远程服务器上配置什么?

时间:2015-10-28 20:08:41

标签: ssh phpstorm xdebug ssh-tunnel

我确实在中苦苦挣扎。我放弃并成功连接到本地虚拟机,但速度太慢了。我连接到这台远程机器,即使它让我死亡。

我的Windows 8.1机器上有PhpStorm 9.0.2,尝试使用PuTTY连接到另一个位置的远程CentOS 6,PHP 5.6 / xdebug 2.3.2机器。我在防火墙后面,但我不认为这是问题,因为我可以通过SSH连接没有问题,所以如果我可以正确配置它,隧道应该工作。我认为唯一的问题是我太笨了,无法弄清楚如何正确挖掘。

远程服务器的xdebug如何知道隧道?还是需要知道?我是否需要告诉该服务器有关隧道的信息?或者,一旦我通过隧道连接,它是否已经意识到它?但是,如果 知道,那么为什么xdebug可以在端口9000上连接?我的PhpStorm是否在端口9000上侦听,我的PuTTY会在那里发送数据吗?或者PhpStorm是否需要在端口22上监听?

This tutorial我发现解释如何通过SSH隧道将PhpStorm与远程服务器一起使用不起作用(单击以展开"在Windows上设置SSH隧道)部分。我的远程测试服务器上的Xdebug,即基于PHP / MySQL的开发网站所在的CentOS Linux机器,无法连接到我在9000端口上的本地Windows 8.1开发机器。

我不完全理解隧道,也许我永远不会,因为我花了几个小时研究它并且尚未掌握它。我只是想调试我的应用程序。 :(

本教程指示您使用Putty打开与远程服务器的SSH连接并配置"隧道"用于在远程主机上指定端口9000的连接部分,以及用于本地开发计算机的localhost:9000。我已经一遍又一遍地做到了,但似乎没有人告诉我的远程服务器做什么。

这是我的腻子设置:

PuTTY configuration 1 (fake ip address) PuTTY configuration 2 - the TUNNEL

XDebug日志继续显示无法连接。

I: Checking remote connect back address.
I: Remote address found, connecting to 173.12.34.123:9000.
E: Time-out connecting to client. :-(
Log closed at 2015-10-28 19:31:55

如何判断我的远程XDebug是否在端口9000上尝试直接连接到我的服务器,或者是否使用tunnel端口22?

通过SSH连接哪个用户是否重要? root或其他一些用户?如果我有另一个SSH会话同时连接到同一个服务器并且没有通过隧道连接那么重要吗?

编辑:以下是phpinfo()输出的xdebug设置。它们反映了我当前网站的php.ini/home/testingsite/public_html/php.ini)。 请注意,xdebug.remote_log正在保存/home/testingsite/public_html/var/xdebug/log.txt

xdebug

xdebug support  enabled
Version 2.3.2
IDE Key PHPSTORM

Supported protocols Revision
DBGp - Common DeBuGger Protocol $Revision: 1.145 $

Directive   Local Value Master Value
xdebug.auto_trace   Off Off
xdebug.cli_color    0   0
xdebug.collect_assignments  Off Off
xdebug.collect_includes On  On
xdebug.collect_params   0   0
xdebug.collect_return   Off Off
xdebug.collect_vars Off Off
xdebug.coverage_enable  On  On
xdebug.default_enable   On  On
xdebug.dump.COOKIE  no value    no value
xdebug.dump.ENV no value    no value
xdebug.dump.FILES   no value    no value
xdebug.dump.GET no value    no value
xdebug.dump.POST    no value    no value
xdebug.dump.REQUEST no value    no value
xdebug.dump.SERVER  no value    no value
xdebug.dump.SESSION no value    no value
xdebug.dump_globals On  On
xdebug.dump_once    On  On
xdebug.dump_undefined   Off Off
xdebug.extended_info    On  On
xdebug.file_link_format no value    no value
xdebug.force_display_errors Off Off
xdebug.force_error_reporting    0   0
xdebug.halt_level   0   0
xdebug.idekey   PHPSTORM    PHPSTORM
xdebug.max_nesting_level    256 256
xdebug.max_stack_frames -1  -1
xdebug.overload_var_dump    On  On
xdebug.profiler_aggregate   Off Off
xdebug.profiler_append  Off Off
xdebug.profiler_enable  On  On
xdebug.profiler_enable_trigger  On  On
xdebug.profiler_enable_trigger_value    no value    no value
xdebug.profiler_output_dir  var/xdebug/profiles/    var/xdebug/profiles/
xdebug.profiler_output_name cachegrind.out.%p   cachegrind.out.%p
xdebug.remote_autostart Off Off
xdebug.remote_connect_back  On  On
xdebug.remote_cookie_expire_time    3600    3600
xdebug.remote_enable    On  On
xdebug.remote_handler   dbgp    dbgp
xdebug.remote_host  localhost   localhost
xdebug.remote_log   var/xdebug/log.txt  var/xdebug/log.txt
xdebug.remote_mode  req req
xdebug.remote_port  9000    9000
xdebug.scream   Off Off
xdebug.show_exception_trace Off Off
xdebug.show_local_vars  On  On
xdebug.show_mem_delta   Off Off
xdebug.trace_enable_trigger Off Off
xdebug.trace_enable_trigger_value   no value    no value
xdebug.trace_format 0   0
xdebug.trace_options    0   0
xdebug.trace_output_dir /tmp    /tmp
xdebug.trace_output_name    trace.%c    trace.%c
xdebug.var_display_max_children 128 128
xdebug.var_display_max_data 512 512
xdebug.var_display_max_depth    3   3

2 个答案:

答案 0 :(得分:2)

根据您的xdebug日志,您在设置中遇到错误而不是SSH。

根据您phpinfo()的xdebug部分,您需要设置xdebug.remote_connect_back = 0(或off - 相同含义)。另外请确保xdebug.remote_host = localhost

使用当前设置,xdebug尝试连接回请求来自的IP上的TCP 9000,而对于SSH隧道工作,您需要将其连接到本地TCP 9000(并且SSH会将此类连接隧道连接回本地计算机旁路防火墙/路由器)。

答案 1 :(得分:1)

尝试使用PhpStorm对AWS EC2进行xdebug时遇到问题。具体来说,我试图通过ssh隧道运行脚本,但尚未配置任何http服务器设置。

我不知道PHPStorm是否会查看http服务器设置,但是仅设置了ssh隧道,它似乎正在尝试将其xdebug连接到EC2地址。问题是,当XDebug尝试重新连接到我的计算机时,我的PhpStorm在防火墙后面的NAT上运行。在这里无法访问设置端口转发的权限时,我陷入了困境。

但是我发现了一个变通的解决方法,有点像PitB。但这有效。

如果您只需要在远程ssh隧道上运行shell / cli php代码,则除了在某处的端口9000(或9001或您使用的端口)上设置端口转发外,还应将该连接设置为隧道端口22另一种方法。注意:这是在phpstorm外部设置的,例如使用永久性ssh隧道,或者我要做的是在xterm窗口中打开外壳并在其上运行tmux,以便工具栏上的时钟使连接保持活动状态。

例如:

ssh 9001:localhost:9001 -L 10022:localhost:22 awsec2.host.address

现在,您设置ssh隧道(在PhpStorm解释器设置中)以使用127.0.0.1(本地主机)上的10022 ssh端口代替远程地址上的端口22,然后PhpStorm在以下情况下也将使用127.0.0.1:它会尝试连接到9001端口,导致两者都通过您的隧道。

在〜/ .ssh / config中,设置如下所示:

host myawsec2
    Hostname awsec2.host.address
    User myuser
    TCPKeepAlive yes
    ForwardX11 yes
    ForwardX11Trusted yes
    LocalForward 10022 localhost:22
    RemoteForward 9001 localhost:9001