Установка 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
по-прежнему не будет работать.