2015-04-30 2 views
6

Я пытаюсь вызвать установку node.js на удаленном сервере под управлением Ubuntu через SSH. Узел был установлен через nvm.node.js недоступен через ssh

SSHing в и вызова узел работает просто отлично:

[email protected]:~$ ssh [email protected] 
(Server welcome text) 
[email protected]:~$ which node 
/home/user/.nvm/v0.10.00/bin/node 

Однако если объединить их в одну строку:

[email protected]:~$ ssh [email protected] "which ls" 
/bin/ls 
[email protected]:~$ ssh [email protected] "which node" 

Нет знака узла, поэтому я попытался поиске .bashrc и ждать 10 секунд:

[email protected]:~$ ssh [email protected] "source ~/.bashrc; sleep 10; which node" 

Только узел, похоже, пострадал от этого. Одна вещь, которую я заметил, это то, что если я схожу, а затем проверю, в какой оболочке я нахожусь, он говорит -bash, а если я ssh direct, это даст мне /bin/bash. Я попытался выполнить команды внутри оболочки входа в bash:

[email protected]:~$ ssh [email protected] 'bash --login -c "which node"' 

Все еще ничего.

В основном, мой вопрос: Почему bash не обнаруживает мою установку node.js, когда я вызываю ее неинтерактивно из SSH?

ответ

3
$ ssh [email protected] "which node" 

При запуске ssh и указать команду, которая будет работать на удаленной системе, SSH по умолчанию не выделяет PTY (псевдо-TTY) для сеанса. Отсутствие TTY приводит к тому, что ваш удаленный процесс оболочки (т. Е. Bash) инициализируется как неинтерактивный сеанс вместо интерактивного сеанса. Это может изменить способ интерпретации файлов инициализации - bashrc, .bash_profile и т. Д.

Фактическая проблема, вероятно, в том, что строка, которая добавляет /home/user/.nvm/v0.10.00/bin к вашей команде PATH, не выполняется для неинтерактивных сеансов. Есть два способа решения этой проблемы:

  1. Найти команду в файл инициализации (ов), который добавляет /home/user/.nvm/v0.10.00/bin в командный путь, понять, почему он не работает для не интерактивных сессий, и исправить ее.

  2. Пробег ssh с опцией -t. Это говорит о том, чтобы выделить PTY для удаленного сеанса. Или добавьте строку RequestTTY yes в ваш файл .ssh/config на локальном хосте.

+0

Я запустить его как SSH -t пользователь @ удаленный_сервер «какой узел», но он все еще не Найди это. Добавление RequestTTY в файл .ssh/config также не имеет никакого эффекта. – TDN169

+0

Я также попробовал ssh -t user @ remoteserver «bash -rcfile ~/.bashrc -c», который не имеет никакого эффекта. – TDN169

+1

Я только что попробовал: ssh -t user @ remoteserver 'export NVM_DIR = "/ home/user/.nvm"; [-s "$ NVM_DIR/nvm.sh"] &&. "$ NVM_DIR/nvm.sh"; какой узел, и это работает! – TDN169

Смежные вопросы