Де зазвичай встановлюється $ BASH_ENV?


19

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

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

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

редагувати 2: Файл ~ / .ssh / середовища на обох серверах має BASH_ENV = ~ / .bashrc


1
Чи однаковий / etc / passwd на обох серверах? Якщо bash називається "/ bin / sh" замість "/ bin / bash", він не буде читати файли bashrc (лише файли профілю).
freiheit

Не ідентично, але користувач, якому я надсилаю команди, має однаковий рядок у / etc / passwd в обох системах.
Василь

А як щодо ~ / .profile та ~ / .bash_profile?
freiheit

вони однакові і обидва містятьif [ -f ~/.bashrc ]; then . ~/.bashrc; fi
Василь

Ви переконалися, що / etc / bashrc та /etc/profile.d/* однакові? ~ / .bash_login? /etc/pam.d/*? /etc/security/pam_env.conf?
freiheit

Відповіді:


21

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він увімкнено), але зі сторінки man не зрозуміло, де цей крок потрапляє у вищевказану послідовність.


Я знайшов різницю! PermitUserEnvironment yesвстановлюється в / etc / ssh / sshd_config на робочому сервері, але не проблема. Я змінив її, але я просто перевірив команду, і вона знову не працювала. Чи аналізується цей файл щоразу, коли я намагаюся ввімкнути ssh? У мене немає ~ / .ssh / rc для користувача, над яким я працюю, і в будь-якій системі немає файлу / etc / ssh / sshrc.
Василь

О, я думаю, мені потрібно реанімізувати ssh? /etc/init.d/sshd?
Василь

@Basil Так, вам потрібно перезапустити sshd. Це також означає, що на робочому сервері може бути файл (перевірте список тих, які я вам дав sshd), що встановлює середовище.
Андрій Б

Так, це було розчаровує частину - все, що мені потрібно, встановлено у. Я припускаю, що це спрацює.
Василь

Щойно я закінчив реініціалізацію SSH і мої неінтерактивні команди SSH зараз працюють! Дякую тобі за допомогу, я ніколи не знайшов би це поле самостійно.
Василь
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.