Переменные среды недоступны при запущении скриптов по ssh

Экс-слияние должно добиться цели, я исследовал бы причину уничтожение и действие соответственно.

5
задан 3 April 2014 в 14:17
2 ответа

На страницах руководства моего сервера:

  1. Читает файл ~ / .ssh / environment, если он существует, и пользователям разрешено изменять свою среду. См. Параметр PermitUserEnvironment в sshd_config (5).

Вам необходимо объявить переменные среды и разрешить их в расположении удаленного сервера / etc / ssh / sshd_config , включив свойство PermitUserEnvironment как PermitUserEnvironment yes и установите переменные среды в ~ / .ssh / environment.

1
ответ дан 3 December 2019 в 01:44

Когда вы запускаете команду в качестве аргумента для ssh, команда запускается непосредственно sshd; оболочка не задействована.

Вы можете проверить это, используя что-то вроде следующего:

ssh b @ B pstree

Это оболочка (в данном случае bash), которая извлекает ваш .bash_profile, и только делает это, если оболочка вызывается как оболочка входа в систему или если оболочка была вызвана с параметром --login (см. справочную страницу bash; ищите INVOCATION). Окружение, которое вы получаете при запуске команды напрямую, устанавливается такими вещами, как sshd и PAM, когда вы входите в систему.

Таким образом, если вам нужен ваш .bash_profile, вам нужно запустить его под оболочкой, и вам нужно запустить оболочку как интерактивная оболочка или оболочка входа, например:

ssh b @ B"bash -l -c 'env'"

Это должно дать вам желаемый результат. Единственное, на что следует обратить внимание, это то, что цитирование довольно быстро становится сложным. Обратите внимание, что, по крайней мере, в Linux

ssh b @ B bash -l -c 'env'

не предоставит вам оболочку входа в систему (я не уверен, почему).

3
ответ дан 3 December 2019 в 01:44

Теги

Похожие вопросы