如何将 NodeJS 调试器通过隧道传送到 Vagrant 框?

Posted

技术标签:

【中文标题】如何将 NodeJS 调试器通过隧道传送到 Vagrant 框?【英文标题】:How do I tunnel the NodeJS debugger through to a Vagrant box? 【发布时间】:2014-06-30 20:48:27 【问题描述】:

我正在尝试设置 WebStorm NodeJS 调试器以连接到托管在 Vagrant 盒子上的 NodeJS 项目。我遇到了一些困难。

如果我以传统方式(即通过终端)进入服务器,一切正常,我可以通过 cURL 访问它,通过 WebStorm 等进行调试。

    ssh -L 5858:127.0.0.1:5858  -N vagrant@10.20.30.40

一旦我开始工作,我将以下内容放入我的 Vagrantfile:

    config.vm.network :forwarded_port, guest: 5858, host: 5858

与以前不同,这仍然适用于 Vagrant 盒子,但不适用于我的本地机器。当我卷曲到它时,我收到以下错误:

    curl: (56) Recv failure: Connection reset by peer

有人对我做错了什么有任何想法吗?这甚至可以通过 Vagrantfile 进行配置吗?

我想通过这个来完成它,以便我的团队可以使用零配置连接他们的调试器。

谢谢

【问题讨论】:

我也遇到了同样的问题,你解决了吗? 没有。我有点认为当前的 Vagrant 设置是不可能的。它进行端口转发,但隧道是一种 SSH 操作,似乎超出了它的工作方式。打算开始赏金,看看是否有人能证明我错了 这对我有用:neilk.net/blog/2013/08/21/… 【参考方案1】:

您可以尝试使用配置 shell 脚本 (tunnel.sh),它会创建一个远程端口转发到您的机器:

#!/bin/bash

# executed from 'vagrant'
ssh -R 5858:127.0.0.1:5858 me@my-machine

实际上你应该把这个脚本和你的 Vagrantfile 放在同一个文件夹中,然后编辑 Vagrantfile 以添加以下行:

Vagrant.configure("2") do |config|
    config.vm.provision "shell", path: "tunnel.sh"
end

这将使 Vagrant 每次执行命令时都会执行此脚本:

vagrant up

或者:

vagrant provision

尝试此操作时,您应该删除 Vagrantfile 中的端口转发行。

我没有尝试过隧道,但实际上我在启动时使用配置脚本来配置虚拟机,例如在 authorized_keys 中复制公钥和类似任务。

【讨论】:

这会放在哪里?你真的试过了吗? 我在答案中添加了有关如何使用配置脚本的更多详细信息。

以上是关于如何将 NodeJS 调试器通过隧道传送到 Vagrant 框?的主要内容,如果未能解决你的问题,请参考以下文章

如何调试 ngrok 隧道暴露的远程 JVM

无法将 dialogflow webhook 链接到 ngrok 隧道

我可以让 nodejs --debug 标志等待远程连接吗

VS Code - 通过 SSH 隧道打开文件夹和编辑文件

使用隧道 ssh 通过 nodeJS 中的 mongoose 通过 ssh 连接到远程服务器 mongoDB

ssh 隧道连接在 chromeos 上被拒绝