利用ssh隧道,进行外网php xdebug调试和nodejs调试

ssh不仅仅可以用来登录远程主机,而且可以搭建本机到远端机的加密的信息通道,从而实现在本地调试外网php代码和nodejs代码。

一、ssh的基本用法:

  • ssh [email protected] 登录到远端主机
  • ssh [email protected] xxxCmd 登录到远端主机并执行xxxCmd命令
  • ssh -R localhost:9001:localhost:9001 [email protected] 通过ssh登录到远端主机,并在远端主机上面监听9001端口,任何流入远端主机9001的信息都将通过ssh隧道传输到本机上的9001端口
  • ssh -L localhost:9229:192.168.2.10:9229 [email protected] 通过ssh登录到远端主机,并在本地主机上面监听9229端口,任何流入本机9002端口的信息都将通过ssh隧道传输到远端机上,并再转发给192.168.2.10的9229端口

二、利用ssh隧道开启远程php-xdebug调试

  • 修改远端机ssh配置,在/etc/ssh/sshd_config中添加GatewayPorts yes,并重启ssh服务。
sudo systemctl restart ssh
  • 远端机上php安装xdebug扩展,并开启调试。不清楚的话,可以看我写的另一篇文章PHP开启Xdebug调试指南。
  • 本地机器上安装好Phpstorm,并配置好xdebug调试选项。不清楚的话,可以看我写的另一篇文章PHP开启Xdebug调试指南。
  • 搭建本地到远端机器的ssh隧道。
ssh -p 2222 -R localhost:9001:localhost:9001 [email protected]
  • 最后在本机IDE上开启调试监听,就可以了。

原理其实也很简单,就是利用ssh建立的隧道,将远端的9001端口和本地的9001端口打通。远端的xdebug向它所在机器的9001端口发送的dbpg协议消息都被转发到了本机的9001端口,本机收到消息后,再通过ssh隧道向远端机xdebug回消息。整个过程就好像本机调试一样的,xdebug扩展和本机的IDE都以为进行的是本机调试。

三、利用ssh隧道开启远程nodejs调试

  • 在远端机执行node --inspect-brk=0.0.0.0:9229 test.js
    test.js的内容如下 :


    利用ssh隧道,进行外网php xdebug调试和nodejs调试_第1张图片
    test.js.png
  • 在本机chrome上访问http://remote.example.com:9229/json/list,出现类似如下响应的json,则表明正常。

[ {
  "description": "node.js instance",
  "devtoolsFrontendUrl": "chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=xx.xx.xx.xx:9229/c230d667-3733-42dc-9293-a5e657f15a9a",
  "faviconUrl": "https://nodejs.org/static/favicon.ico",
  "id": "c230d667-3733-42dc-9293-a5e657f15a9a",
  "title": "test.js",
  "type": "node",
  "url": "file:///data1/www/tmp/test.js",
  "webSocketDebuggerUrl": "ws://xx.xx.xx.xx:9229/c230d667-3733-42dc-9293-a5e657f15a9a"
} ]
  • 搭建远端机器到本地的ssh隧道
ssh -L localhost:9229:localhost:9229 [email protected]
  • 本机上打开chrome,访问chrome://inspect,发现Remote Target下面多出来test.js标签。如下图所示:
    利用ssh隧道,进行外网php xdebug调试和nodejs调试_第2张图片
    chrome-inspect.png

点击蓝色inspect,会出现源代码调试窗口,打上断点就可以调试了。

利用ssh隧道,进行外网php xdebug调试和nodejs调试_第3张图片
begin-debug-in-chrome.png

原理同上

利用ssh隧道,进行外网php xdebug调试和nodejs调试_第4张图片
客官觉得写得好就打个赏呗^_^

你可能感兴趣的:(利用ssh隧道,进行外网php xdebug调试和nodejs调试)