Установка NVM на пользователя не работает с автоматизированными логинами ssh

Обычно, когда я захожу на свой сервер через putty, я могу использовать команды nvm, grunt, gulp, но если я подключаюсь с расширением ssh2 в php или через sshpass через скрипт bash, эти команды не работают, если я сначала не выполню эти команды:

~/.nvm/nvm.sh 
source ~/.profile
nvm current

А это мой ~/.profile файл:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

В чем проблема? Почему мне нужно выполнять эти команды каждый раз с такими инструментами автоматизации, как ssh2 или sshpass?

Моя операционная система Ubuntu 16.04

1 ответ

Это не имеет ничего общего с sshpass, Вы можете убедиться в этом, запустив сессию ssh без sshpass, и вы увидите, что даже если вы введете пароль вручную, он все равно не будет работать.

Когда вы запускаете ssh с командой после нее, она запускает удаленную оболочку, которая не подключена к TTY, и эта оболочка не считается оболочкой входа в систему. Для оболочек без входа в систему.profile просто не запускается.

Простое решение этой проблемы - перенести настройку среды из .profile в .bashrc, .bashrc запускается даже для неинтерактивных оболочек, и поэтому должен обеспечивать необходимую настройку среды.

В качестве примечания, почему вы вообще используете sshpass? Почему бы не использовать более безопасную аутентификацию с открытым ключом?

Для пояснения, тот факт, что оболочка не подключена к TTY, не имеет отношения к вашей проблеме. По крайней мере, для openssh, вы можете сказать ему, чтобы открыть TTY, даже если команда для запуска предоставляется путем указания -t в командной строке. .profile по-прежнему не будет работать.

Другие вопросы по тегам