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代理

配置ssh

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

# txCentos 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成功连接即可。

2. 通过ssh进行端口映射

ssh提供了三种代理模式:

正向代理(-L): 将本地端口数据转发到远程端口反向代理(-R): 将远程端口数据转发到本地端口socks5 代理(-D): 类似于ssr

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

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

vscode配置[2]

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

创建launch.json

2. 写入以下配置

{ "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/**" ] } ] }

3. 选择新增的启动配置

4. 启动调试

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

参考

^node远程调试 ^vscode远程调试 #_remote-debugging