vscode 下使用 ssh 代理进行 node 远程调试

node调试器[1]

node程序可以在启动时添加 --inspect 参数暴露出调试端口,格式文档如下:

  • --inspect

    启用监视器代理在默认地址和端口上监听(127.0.0.1:9229)。

  • --inspect=[host:port]

    启用监视器代理绑定地址或主机名宿主 (默认:127.0.0.1)监听端口 (默认:9229)。

  • --inspect-brk

    启用监视器代理监听默认地址和端口(127.0.0.1:9229)在用户代码启动前终止。

  • --inspect-brk=[host:port]

    启用监视器代理绑定地址和主机名宿主(默认:127.0.0.1)监听端口(默认:9229)在用户代码启动前终止。

  • Node 监视script.js

    通过 --inspect 标志生成一个新的子进程,使用主进程运行 CLI 调试器。

  • node inspect --port=xxxx script.js
    通过 --inspect 标志生成一个新的子进程,使用主进程运行 CLI 调试器。监听端口(默认:9229)。

出于安全考虑,调试器监听公网ip是非常危险的,因为这有可能导致生产环境服务进程被恶意中断!一般使用时监听127.0.0.1即可,这样就可以限制在本机进行调试了,如果想在远端调试的话,则可以使用ssh代理进行通信。

如果你只是想测试一段个人的代码,可以直接在 --inspect 监听公网 ip,但我更推荐你使用 remote-ssh,结合 Live Share 你将开启远程协作开发的新时代。

SSH代理

  1. 配置ssh

在用户目录下的.ssh文件中新建config文件,权限600,写入以下规则:

code shell
Host 140.xx.xx.100
  HostName 140.xx.xx.100
  PreferredAuthentications publickey
  # 秘钥文件
  IdentityFile ~/.ssh/some
  # 服务器ssh端口
  Port 22
  # 登录用户
  User root

使用 ssh 140.xx.xx.100 成功连接即可。

  1. 通过ssh进行端口映射

ssh提供了三种代理模式:

  • 正向代理(-L): 将本地端口数据转发到远程端口

  • 反向代理(-R): 将远程端口数据转发到本地端口

  • socks5 代理(-D): 类似于ssr

由于上文node服务暴露出的调试端口绑定了127.0.0.1,只能本机访问,所以这里需要借助ssh的正向代理映射到本地端口:

code shell
# ssh -L {本地映射端口}:{远程端口绑定的ip}:${需要代理的远程端口} {远程ip}
ssh -L 1234:localhost:9333 140.xx.xx.100

vscode配置[2]

当上面的一切都准备好了以后,首先本地需要一份和服务端完全一致的代码,然后用vscode打开这个文件夹,就可以使用vscode进行调试了。

  1. 创建launch.json

  1. 写入以下配置
code json
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      // 以附加到进程的方式启动
      "request": "attach",
      // 配置名称,显示在启动配置下拉菜单中
      "name": "ssh远程调试",
      // 因为远程机器上的端口并未外放,只能通过ssh进行端口映射,所以这里写本机地址
      "address": "127.0.0.1",
      // 远程调试端口在本机的映射端口
      "port": 1234,
      // 本机项目地址
      "localRoot": "${workspaceFolder}",
      // 项目在远程机器上的绝对路径
      "remoteRoot": "/home/root/app/",
      // 调试时要跳过的文件的 glob 模式数组。模式"<node_internals>/**"与所有内部Node.js模块相匹配。
      "skipFiles": [
        "<node_internals>/**",
        // 调试时自动跳过node_modules中的文件,如有需要可以去掉
        "${workspaceFolder}/node_modules/**"
      ]
    }
  ]
}
  1. 选择新增的启动配置

  1. 启动调试

连接成功后,F5启动程序,即可进入调试模式,断点和记录点日志与本地调试使用一致,本文不再赘述。

参考资料