node.js通过ssh不可用

TDN*_*169 6 ssh bash node.js

我试图通过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
Run Code Online (Sandbox Code Playgroud)

但是,如果我将它组合成一行:

user@localmachine:~$ ssh user@remoteserver "which ls"
/bin/ls
user@localmachine:~$ ssh user@remoteserver "which node"
Run Code Online (Sandbox Code Playgroud)

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

user@localmachine:~$ ssh user@remoteserver "source ~/.bashrc; sleep 10; which node"
Run Code Online (Sandbox Code Playgroud)

只有节点似乎受此影响.我注意到的一件事是,如果我进去,然后检查我在里面的那个外壳-bash,如果我直接ssh它给了我/bin/bash.我尝试在bash登录shell中运行命令:

user@localmachine:~$ ssh user@remoteserver 'bash --login -c "which node"'
Run Code Online (Sandbox Code Playgroud)

依然没有.

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

TDN*_*169 7

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

user@localmachine:~$ ssh user@remoteserver "bash -i -c 'which node'"
/home/user/.nvm/v0.10.00/bin/node
Run Code Online (Sandbox Code Playgroud)


Ken*_*ter 3

$ ssh user@remoteserver "which node"
Run Code Online (Sandbox Code Playgroud)

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

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

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

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