如何通过 ssh 运行 npm

How to run npm through ssh

提问人:samb 提问时间:12/13/2017 更新时间:1/15/2022 访问量:8665

问:

按照 https://nodesource.com/blog/installing-node-js-tutorial-using-nvm-on-mac-os-x-and-ubuntu/ 安装 npm 后,在末尾增加了 3 行来加载 nvm 工具。~/.bashrc

使用 ssh 连接到该服务器时,输出按预期。npm --version5.5.1

但是当远程运行时:

ssh server /bin/bash -l -c "npm --version"

我得到:

--version: npm: 找不到命令

在一行中远程运行时,使 npm 可用的正确方法是什么?

节点.js bash

评论


答:

8赞 Travis Clarke 12/13/2017 #1

正如您可能怀疑的那样,问题在于您的采购没有。通过添加标志,您的想法是正确的,但在这种情况下,您真正需要的是生成交互式 shell 的标志,从而在命令执行之前获取您的信息。.bashrc-l-i.bashrc

ssh -t "server" 'bash -i -c "npm --version"'

man ssh

如果指定,则在远程主机上执行,而不是在登录 shell 上执行。command

-t强制伪终端分配。

男人 Bash

当启动不是登录 shell 的交互式 shell 时,bash 会从 和 读取并执行命令(如果这些文件存在)。/etc/bash.bashrc~/.bashrc

评论

0赞 Tim Boland 2/8/2018
当我尝试这样做时,我得到: bash:无法设置终端进程组 (-1):设备 bash 的 ioctl 不合适:此 shell 中没有作业控制
2赞 Travis Clarke 3/7/2018
@TimBoland – 我已经更新了我的答案并将标志添加到 .此标志将强制伪终端分配,并应解决您的问题。-tssh
0赞 Andy Ray 7/17/2023
哇,谢谢,我已经用头撞了很久了。Bash 是一个真正的垃圾生态系统
0赞 Noel Vaca Moreno 1/12/2022 #2

我在 /etc/profile.d 中有我的 nvm.sh 文件,其中包含以下内容:

export NVM_DIR = "/ usr / local / nvm"
[-s "$ NVM_DIR / nvm.sh"] && \. "$ NVM_DIR / nvm.sh" # This loads nvm
[-s "$ NVM_DIR / bash_completion"] && \. "$ NVM_DIR / bash_completion" # This loads nvm bash_completion

因此,要通过ssh从另一台服务器进行连接,我可以通过增加之前来完成,即:. /etc/profile.d/nvm.sh

ssh -t "server" ". /etc/profile.d/nvm.sh && npm -v"
0赞 mmomtchev 1/14/2022 #3

请参考这个问题:https://apple.stackexchange.com/questions/12993/why-doesn't-bashrc-run-automatically

它既有解决方案,也有对问题根本原因的解释。通常,您不必在级别上指定任何内容 - shell 初始化应该是自动的,并且应该打开交互式 shell。sshssh