node.js通过ssh不可用

我正尝试在通过SSH运行Ubuntu的远程服务器上调用node.js的安装。 节点已经通过nvm安装。

SSH和进入调用节点工作得很好:

user@localmachine:~$ ssh user@remoteserver (Server welcome text) user@remoteserver:~$ which node /home/user/.nvm/v0.10.00/bin/node 

但是,如果我把它合并成一行:

 user@localmachine:~$ ssh user@remoteserver "which ls" /bin/ls user@localmachine:~$ ssh user@remoteserver "which node" 

没有节点的迹象,所以我试图采购.bashrc并等待10秒钟:

 user@localmachine:~$ ssh user@remoteserver "source ~/.bashrc; sleep 10; which node" 

只有节点似乎受此影响。 有一件事我注意到,如果我ssh进来,然后检查我在其中的shell说-bash而如果我ssh直接它给我/bin/bash 。 我试着在bashloginshell里面运行命令:

 user@localmachine:~$ ssh user@remoteserver 'bash --login -c "which node"' 

依然没有。

基本上我的问题是: 当我从SSH以非交互方式调用它时,为什么不是bashfind我的node.js安装?

 $ ssh user@remoteserver "which node" 

当您运行ssh并指定要在远程系统上运行的命令时,ssh默认不会为会话分配PTY(伪TTY)。 没有TTY会导致远程shell进程(即bash)初始化为非交互式会话,而不是交互式会话。 这可以改变它如何解释你的初始化文件–bashrc,.bash_profile等等。

实际的问题可能是将/home/user/.nvm/v0.10.00/bin添加到命令PATH中的行不针对非交互式会话执行。 有两种方法可以解决这个问题:

  1. 在您的初始化文件中find将/home/user/.nvm/v0.10.00/bin添加到您的命令path中的命令,找出为什么它不在非交互式会话中运行并更正它。

  2. -t选项运行ssh 。 这告诉它为远程会话分配一个PTY。 或者在本地主机的.ssh/config文件中添加RequestTTY yes行。

另一种方法是使用-i标志以交互模式运行bash:

 user@localmachine:~$ ssh user@remoteserver "bash -i -c 'which node'" /home/user/.nvm/v0.10.00/bin/node