У меня есть сдвоенные серверы 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
включен), но из справочной страницы не ясно, где этот шаг попадает в приведенную выше последовательность.