运行 版本托管节点作为远程 SSH 脚本的问题

The problem with running version managed Node as a remote SSH script

我的问题是关于 nvm 但它可能与其他节点版本管理有关,例如 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 之类的别名。当您使用 SSH 登录时,别名安装在 ~/.bashrc 中,即 运行。但是当你使用 ssh SERVER COMMAND 环境脚本执行远程命令时不是 运行 因为 shell 运行 处于受限模式。

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

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

你试过运行sss user@host nvm run node ~/getstats了吗?

试试这个:

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