繁体   English   中英

node.js通过ssh不可用

[英]node.js unavailable via 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 in然后检查我在哪个shell里面说-bash而如果我直接ssh它给我/bin/bash 我尝试在bash登录shell中运行命令:

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

依然没有。

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM