У меня есть два 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 - это пустая строка на сервере, которая не работает, и я не могу найти, где она была установлена на сервере, который работает.
edit 2: файл ~ / .ssh / environment на обоих серверах имеет BASH_ENV = ~ / .bashrc
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
Ответы:
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
он включен), но со страницы руководства неясно, где этот шаг попадает в вышеуказанную последовательность.источник
PermitUserEnvironment yes
устанавливается в / etc / ssh / sshd_config на рабочем сервере, но не проблемный. Я изменил его, но я просто протестировал команду, и она снова не сработала. Этот файл анализируется каждый раз, когда я пытаюсь войти в ssh? У меня нет ~ / .ssh / rc для пользователя, с которым я работаю, и нет файла / etc / ssh / sshrc ни в одной системе.sshd
. Это также означает, что на рабочем сервере может быть файл (проверьте список из тех, что я вам далsshd
), который задает среду.