【问题标题】:PhpStorm ssh tunnel to remote server - anything to configure on remote server?到远程服务器的 PhpStorm ssh 隧道 - 在远程服务器上配置什么?
【发布时间】:2016-01-28 19:04:15
【问题描述】:

我已经为此苦苦挣扎了。我放弃并成功连接到本地虚拟机,但是速度太慢了。我必须连接到这台远程机器,即使它会杀了我。

我的 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 隧道”部分)。在我的远程测试服务器 CentOS Linux 上进行 Xdebug我的基于 PHP/MySQL 的开发网站所在的机器无法连接到端口 9000 上的本地 Windows 8.1 开发机器。

我并不完全了解隧道,也许我永远也不会,因为我已经花了几个小时研究它,但还没有掌握它。我只想调试我的应用程序。 :(

本教程指导您使用 Putty 打开与远程服务器的 SSH 连接,并配置连接的“隧道”部分以指定远程主机上的端口 9000,并为本地开发机器指定 localhost:9000。我一遍又一遍地这样做,但似乎没有人告诉我的远程服务器该做什么。

这是我的腻子设置:

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 上直接连接到我的服务器,还是通过端口 22 使用tunnel

我通过 SSH 连接的用户是否重要? root 或其他用户?如果我有另一个 SSH 会话同时连接到同一台服务器但未通过隧道连接,这有关系吗?

编辑:这是phpinfo() 输出的我的xdebug 设置。它们反映了我当前网站根目录 (/home/testingsite/public_html/php.ini) 中的 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

【问题讨论】:

  • 试试这个教程(应该和你尝试过的类似) -- derickrethans.nl/debugging-with-xdebug-and-firewalls.html
  • 但在此之前:请显示您的 xdebug 配置。就目前而言,您的 xdebug 配置中很可能有错误,而不是 SSH(至少 xdebug 日志表明如此)。
  • @LazyOne 你提出了我的另一个困惑点。我的网站根目录中有一个php.ini。但是,当我在那里查看phpinfo() 时,它显示了全局设置。即使(一些?)本地设置正在工作,因为 xdebug_remote_log 正在按指定写入。我刚刚重新启动了 apache,现在本地设置显示在 phpinfo() 输出中。我会在我的问题中发布它们。
  • @LazyOne,我刚刚添加了我的phpinfo() 输出。它的格式很糟糕。如果您认为这样更好,我可以截取屏幕截图并将其放入。从日志来看,Xdebug 肯定尝试连接回我在端口 9000 上的 IP 地址。
  • 请禁用xdebug.remote_connect_back(必须是0off)才能正常工作。使用 SSH 隧道,xdebug 必须连接到本地 TCP 9000 端口,而不是远程。

标签: ssh phpstorm xdebug ssh-tunnel


【解决方案1】:

根据您的 xdebug 日志,您的设置有错误,而不是 SSH。

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

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

【讨论】:

  • 你是绝对正确的。我仍然很想知道是否有一种简单的方法可以在我的 Windows 8.1 客户端或远程 CentOS 主机上测试隧道是否正常工作。如果我能确定隧道正在工作,我就可以不再担心它,也许可以更仔细地查看我的配置。不过,我很高兴它现在正在工作。我已经在愉快地调试代码而不是调试调试了。
  • 嗯...尝试通过 telnet 连接到目标计算机:(telnet open 127.0.0.1 9000 - 类似的东西)。如果连接被拒绝,则:1)SSH 隧道不工作/未设置正确或 2)没有人在最终机器上监听该端口(对于 PhpStorm,这意味着您必须激活“电话手柄”图标)。至于单独检查 SSH 隧道——完全不确定(无论如何我都不是这方面的专家)。
  • 嗯,好的,所以从远程机器上 telnet 看看端口 9000 是否通过。我知道了。您可能不是专家,但您对我的帮助很大。从 6 月中旬开始,我一直梦想着远程调试。
【解决方案2】:

我在尝试使用 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 窗口中打开一个 shell 并在其上运行 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

【讨论】:

  • 顺便说一句,需要注意的是,上述方法也适用于 ProxyCommand 转发的 ssh 隧道。 (在哪里连接到防火墙或 nat 后面的远程 ssh,你必须先连接到另一个暴露端口的 ssh 服务器)
  • 它也可能很方便,因为如果您更改隧道的目的地(到具有类似配置/文件的不同远程服务器端),则不需要更改 phpstorm 中的任何设置跨度>
猜你喜欢
  • 2012-10-02
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 2014-05-03
  • 2017-01-01
  • 2020-07-05
相关资源
最近更新 更多