2014-08-27 4 views
0

На моем узле node_name У меня есть $JAVA_HOME и другие переменные среды, установленные в /etc/profile. Я знаю (обнаружил это), что knife ssh не является оболочкой входа и поэтому не загружает переменные среды. Есть ли способ загрузить переменные окружения без source? Прямо сейчас я вынужден сделатьНож ssh не загружает переменные среды окружения

knife ssh 'name:nod_name' 'source /etc/profile; echo $JAVA_HOME' 

Я цепочкой в ​​нескольких командах во время knife ssh включая некоторые из переменных окружения и загрузкой /etc/profile просто делает это дольше. Есть ли способ загрузить/etc/profile во время ножа ssh?

+0

Это проблема с конфигурацией оболочки удаленного узла. Если вы SSH'ed в удаленный узел без ножа, вы столкнулись бы с такой же проблемой. –

+0

Как именно вы исправляете конфигурацию оболочки этого узла? – absessive

ответ

1

Это не имеет ничего общего с ножом ssh, это как раз то, как SSH работает для команд, выполняемых непосредственно над соединением. Вы также можете запустить команду, например, bash -l -c "something". В общем, вы не можете рассчитывать на какой-либо конкретный способ установки env vars в неинтерактивных сеансах как переносимый, так что caveat emptor.

0

Не совсем ответ на вопрос ОП, но он искал решение подобной проблемы. Думал, что поделится своей ситуацией и решением, возможно, помогу кому-нибудь. Моя проблема заключалась в том, чтобы удаленно запускать Chef на наших локальных серверах с учетными данными awscli в корневом каталоге .bashrc. Переключатель -i был тем, что мне не хватало, чтобы загрузить переменные окружения root в .bashrc.

Не работает:

knife ssh "name:$NODE" "sudo /etc/init.d/appserver stop; sleep 10;sudo chef-client -r role_appserver" -A -x user -P password

Работал:

knife ssh "name:$NODE" "sudo /etc/init.d/appserver stop; sleep 10;sudo -i chef-client -r role_appserver" -A -x user -P password

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