Назад | Перейти на главную страницу

Где обычно устанавливается $ BASH_ENV?

У меня есть сдвоенные серверы Linux, которые должны быть настроены одинаково, однако команды ssh для одного из них не работают для команд, для которых требуется путь, указанный в ~ / .bashrc. Например, я могу использовать такую ​​команду, как pwd как в интерактивном режиме, так и через ssh, но если я попытаюсь запустить программу, которая находится в папке bin приложения, она будет работать только в интерактивной оболочке для одного из серверов.

Файлы / etc / profile и / etc / environment на обоих серверах идентичны, однако для $ BASH_ENV установлено значение ~ / .bashrc на сервере, который работает правильно. Я хочу установить $ BASH_ENV на сервере, который не работает, но я бы предпочел установить его в том же месте, что и на рабочем сервере. В каких местах Linux будет запускаться во время неинтерактивного входа в систему, например, при выполнении команды ssh с другого компьютера?

edit: строка в / etc / passwd для пользователя указывает / bin / bash на обоих серверах. Файл ~ / .bash_profile для обоих серверов идентичен и содержит if [ -f ~/.bashrc ]; then . ~/.bashrc; fi. Единственная разница между системами состоит в том, что $ BASH_ENV - это нулевая строка на сервере, которая не работает, и я не могу найти, где она была установлена ​​на работающем сервере.

изменить 2: файл ~ / .ssh / environment на обоих серверах имеет BASH_ENV = ~ / .bashrc

BASH_ENV будет устанавливаться только через среду или другой сценарий, полученный во время инициализации. Для неинтерактивной оболочки она будет пытаться получить дополнительные файлы только в том случае, если эта оболочка также является оболочкой входа в систему. (в этом случае будет прочитано ~/.bash_profile, ~/.bash_login, и ~/.profile... но если бы он это делал, у вас не было бы проблем)

В первую очередь следует обратить внимание на среду, в которой вызывается подоболочка.

  • Экспортированный BASH_ENV переменная будет передана. Имейте в виду, что это может быть скрыто в исходном файле.
  • Его можно ввести как параметр в той же строке, вызывающей скрипт, т.е. BASH_ENV=blah /path/to/somecommand.sh. Это выглядит как больной большой палец, так что вы, вероятно, заразились бы этим.

Если он устанавливается после входа в систему, но вы не можете понять где, возможно, вам придется посмотреть, что отвечает за создание среды входа в систему.

  • Все обычные файлы, получаемые из оболочки входа. man bash для исчерпывающего списка.

  • PAM: Как предлагает freiheit в комментариях, отметьте /etc/security/pam_env.conf, и любые дополнительные файлы, на которые ссылается pam_env.so. Другие модули PAM также могут нести ответственность, но если ваши конфигурации PAM выглядят одинаково, это, вероятно, не так.

  • sshd: Он просканирует следующие файлы по порядку:

    • ~/.ssh/environment (перед переходом в домашний каталог; только если PermitUserEnvironment включен в sshd_config)
    • ~/.ssh/rc (после перехода в домашний каталог; всегда)
    • /etc/ssh/sshrc (если ~/.ssh/rc нет)

Примечание: sshd также будет сканировать environment=value строк в файле авторизованных ключей пользователя (если PermitUserEnvironment включен), но из справочной страницы не ясно, где этот шаг попадает в приведенную выше последовательность.