通过 SSH 隧道进行远程调试
本教程介绍如何使用 SSH 隧道在开发机器和远程服务器之间建立安全连接。这对于调试远程机器上的代码非常有用,因为它们之间有防火墙,或者 NAT 路由器阻止直接连接,或者 ISP 或网络基础设施不允许传入 TCP 连接到开发人员机器。
准备调试引擎
在开始调试之前,请确保已正确安装和配置调试引擎。PhpStorm 支持使用两种最流行的工具进行调试:Xdebug和Zend Debugger。这些工具不能同时使用,因为它们相互阻挡。为避免此问题,您需要更新php.ini文件中的相应部分,如配置 Xdebug和配置 Zend Debugger中所述。
在编辑器中打开活动的php.ini文件:
在“设置/首选项”对话框 ( Ctrl+Alt+S) 中,单击PHP。
在打开的PHP页面上,单击CLI Interpreter字段旁边的。
在打开的CLI 解释器对话框中,配置文件只读字段显示活动php.ini文件的路径。单击在编辑器中打开。
使用 Xdebug 时,请确保至少指定以下设置:
侦听传入的调试器连接
在 PhpStorm 中,通过单击工具栏或选择调试工具窗口。在启动脚本之前,请确保设置了断点,或者在Settings/Preferences对话框的Debug页面上启用了Break at first line in PHP scripts选项。Ctrl+Alt+S
在主菜单中 这将确保 PhpStorm 在启动调试会话时做出反应并自动打开设置到远程机器的 SSH 隧道
我们要做的是通过 SSH 连接到远程机器并为端口9000(对于 Xdebug 2)、9003(对于 Xdebug 3)或10137(Zend 调试器)设置端口转发。这个想法是在远程服务器上创建一个“虚拟”TCP 端口,将其流量发送到我们自己机器上的 TCP 端口,通过 SSH 隧道传输流量。
SSH 隧道用于通过防火墙进行连接,并在远程服务器和开发人员机器之间建立安全连接。当远程服务器可以直接连接到开发人员机器时(例如,使用Vagrant机器),可能不需要 SSH 隧道。
xdebug.remote_host=ip_address
在这种情况下,我们需要通过设置(对于 Xdebug 2)、xdebug.client_host=ip_address
(对于 Xdebug 3)或确保调试主机是开发者机器的 IP 地址(对于 Zend Debugger)来使调试器连接回开发者机器。这可以使用PhpStorm 小书签、浏览器调试扩展或使用 PhpStorm 调试 PHP CLI 脚本中概述的技术来完成。
设置过程取决于操作系统和所使用的调试器。
在 macOS 或 Linux 上设置 SSH 隧道
在命令行上运行以下命令:
ssh -R 9003:localhost:9003 用户名@主机名ssh -R 9000:localhost:9000 用户名@主机名ssh -R 10137:localhost:10137 用户名@主机名
在 Windows 上设置 SSH 隧道
下载并安装腻子。
通过提供主机名和端口来配置与远程机器的连接。
展开
左侧的源端口将是9000(对于 Xdebug 2)、9003(对于 Xdebug 3)或10137(对于 Zend Debugger)。
对于目的地,输入localhost:9000(对于 Xdebug 2)、localhost:9003(对于 Xdebug 3)或localhost:10137(对于 Zend Debugger)。
确保选择“远程”选项,然后单击 添加。
单击 打开以连接到远程服务器并设置 SSH 隧道。
确保您正在运行一个命令来创建从开发人员的机器到服务器的 SSH 隧道(反之亦然)。
当机器重新启动或连接丢失时,必须重新建立 SSH 隧道。
调试
一旦建立了 SSH 隧道,我们就可以使用Xdebug 或 Zend Debugger使用零配置调试开始调试。当调试器启动时,PhpStorm 会提示接受传入的连接。
一旦我们接受它,我们将能够使用检查暂停程序中概述的技术进行调试。
使用远程 PHP 解释器或通过 SSH 隧道调试 PHP CLI 脚本
正确配置远程 PHP 解释器后,可以创建运行/调试配置,利用远程 PHP 解释器进行调试。
当 SSH 隧道启动并运行时,我们还可以调试 PHP CLI 脚本。由于调试器在远程计算机上运行,因此可以通过使用 PHP 命令行开关或使用环境变量(在远程计算机上)来启动 CLI 调试会话。此工作流不是官方推荐的调试方式,尽管在某些需要从远程服务器端建立调试会话的情况下它可能很有用。
故障排除
调试器从不连接或拒绝连接
当调试器从不连接或拒绝连接时,请检查以下内容:
确保 Xdebug 配置为连接到 127.0.0.1 和端口 9000(对于 Xdebug 2)或端口 9003(对于 Xdebug 3)。
使用 Zend Debugger 时,确保将 PhpStorm 小书签或浏览器调试扩展配置为连接到127.0.0.1。
在设置 SSH 隧道之前,确保 PhpStorm 正在侦听传入的调试器连接。
当机器重新启动或连接丢失时,必须重新建立 SSH 隧道。
远程文件路径未映射到项目中的任何文件路径
在某些情况下,调试器可以连接,但我们收到错误消息,表明没有定义远程文件和项目文件之间的映射。这意味着 PhpStorm 无法确定哪个本地文件对应于正在调试的文件。
我们可以通过单击单击设置路径映射并提供必要的路径映射来解决此问题。此外,我们可以使用配置与 Web 服务器同步中概述的技术来配置这些映射。