【问题标题】:The problem with running version managed Node as a remote SSH script将版本托管节点作为远程 SSH 脚本运行的问题
【发布时间】:2020-01-14 00:37:57
【问题描述】:

我的问题是关于 nvm,但它可能与其他 Node 版本管理有关,例如 nnvs

您可能已经知道可以使用 SSH 运行远程程序,如下所示:

ssh user@server COMMAND

例如,命令可以是 Node.js 脚本:

ssh user@devserver 'node ~/getstats'

问题是它不适用于使用 nvm 安装的 Node。为什么?因为node 实际上是/home/user/.nvm/versions/node/v12.1.0/bin/node 之类的别名。别名安装在~/.bashrc 中,在您使用 SSH 登录时运行。但是当您使用ssh SERVER COMMAND 执行远程命令时,环境脚本不会运行,因为 shell 在受限模式下运行。

一种解决方法是创建包含/home/monitor/.nvm/versions/node/v12.1.0/bin/node * 并且可执行的~/node,然后您可以执行ssh SERVER './node SCRIPT'。但这并不完美,因为一旦升级 Node,路径就会改变,您也需要更新此文件。

解决将版本托管节点作为远程 SSH 脚本运行的问题的推荐方法是什么?

【问题讨论】:

  • 根据这个答案,它仍然应该使用~/.bashrcunix.stackexchange.com/a/332533
  • @PatrickStephansen 我认为.bashrc 已运行但环境变量设置不正确,因为shell 处于受限模式。

标签: node.js linux ssh nvm


【解决方案1】:

试试这个:

ssh user@devserver '. ~/.nvm/nvm.sh && node ~/getstats'

请注意,默认情况下,Ubuntu 18.04 中的.bashrc 具有以下内容:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

【讨论】:

  • 你把我从地狱里救了出来。我什么都试过了,除了这个。你能告诉我必须做什么来使用 ssh 执行远程命令,以便当我 ssh 进入机器时所有可用的 PATH 也可用吗?这就是我试图达到的目标。不会这么难吧?
【解决方案2】:

您是否尝试过运行 sss user@host nvm run node ~/getstats

【讨论】:

  • 我认为您应该能够将其与nvm 的完整路径一起使用,也许还可以使用.nvmrc 文件来指定应为特定脚本使用哪个节点版本。 .nvmrc 文件可以与脚本位于同一目录中。更多详情:github.com/nvm-sh/nvm#nvmrc
猜你喜欢
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
相关资源
最近更新 更多