आमतौर पर $ BASH_ENV कहां सेट किया जाता है?


19

मेरे पास जुड़वां लिनक्स सर्वर हैं, जिन्हें पहचान योग्य रूप से कॉन्फ़िगर किया जाना चाहिए, हालांकि उनमें से एक के लिए ssh कमांड उन कमांड के लिए असफल हो रहे हैं जिन्हें ~ / .bashrc में निर्दिष्ट पथ की आवश्यकता होती है। उदाहरण के लिए, मैं एक कमांड का उपयोग pwdअंतःक्रियात्मक रूप से और ssh दोनों के माध्यम से कर सकता हूं , लेकिन अगर मैं एक प्रोग्राम को चलाने की कोशिश करता हूं जो एप्लिकेशन बिन फ़ोल्डर में स्थित है, तो यह केवल एक सर्वर के लिए एक इंटरैक्टिव शेल में काम करता है।

दोनों सर्वरों पर / etc / प्रोफ़ाइल और / etc / पर्यावरण फ़ाइल समान हैं, हालाँकि $ BASH_ENV को ठीक से काम कर रहे सर्वर पर ~ / .bashrc पर सेट किया गया है। मैं उस सर्वर पर $ BASH_ENV सेट करना चाहता हूं जो काम नहीं कर रहा है, लेकिन मैं इसे उसी स्थान पर सेट करना पसंद करूंगा, जहां यह कार्यशील सर्वर में सेट है। वे कौन से स्थान हैं जो लिनक्स एक गैर-संवादात्मक लॉगिन के समय चलेंगे, जैसे कि दूसरे कंप्यूटर से ssh कमांड?

संपादित करें: उपयोगकर्ता के लिए लाइन / in / etc / passwd दोनों सर्वरों पर / बिन / बैश निर्दिष्ट करता है। दोनों सर्वरों के लिए ~ / .bash_profile फ़ाइल समान है, और इसमें सम्‍मिलित है if [ -f ~/.bashrc ]; then . ~/.bashrc; fi। सिस्टम के बीच एकमात्र अंतर यह है कि $ BASH_ENV सर्वर पर एक अशक्त स्ट्रिंग है जो काम नहीं कर रहा है, और मुझे नहीं मिल सकता है कि यह उस सर्वर में सेट किया गया है जहां यह काम कर रहा है।

2 संपादित करें: दोनों सर्वरों पर ~ / .ssh / पर्यावरण फ़ाइल में BASH_ENV = ~ / .bashrc है


1
दोनों सर्वर पर / etc / passwd समान है? यदि बैश को "/ बिन / बाश" के बजाय "बिन / श" के रूप में कहा जाता है, तो यह किसी भी 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 : जैसा कि टिप्पणियों में सुझाए गए फ़्रीहाइट से पता चलता है /etc/security/pam_env.conf, और किसी भी अतिरिक्त फ़ाइलों को संदर्भित किया जाता है pam_env.so। अन्य पीएएम मॉड्यूल भी जिम्मेदार हो सकते हैं, लेकिन अगर आपके पीएएम कॉन्फ़िगरेशन समान दिखते हैं तो शायद ऐसा नहीं है।

  • sshd : यह निम्न फ़ाइलों को क्रम में स्कैन करेगा:

    • ~/.ssh/environment(होम निर्देशिका में बदलने से पहले; केवल तभी PermitUserEnvironmentसक्षम किया जाता है sshd_config)
    • ~/.ssh/rc (होम डायरेक्टरी में बदलने के बाद; हमेशा)
    • /etc/ssh/sshrc(यदि ~/.ssh/rcमौजूद नहीं है)

नोट: उपयोगकर्ता की अधिकृत कुंजी फ़ाइल (यदि सक्षम है) में लाइनों के sshdलिए भी स्कैन करेगा , लेकिन यह उस मैन पेज से स्पष्ट नहीं है जहां वह चरण उपरोक्त अनुक्रम में आता है।environment=valuePermitUserEnvironment


मुझे एक अंतर मिला! PermitUserEnvironment yesकाम सर्वर पर / etc / ssh / sshd_config में सेट है, लेकिन समस्या एक नहीं है। मैंने इसे बदल दिया, लेकिन मैंने सिर्फ एक कमांड का परीक्षण किया और यह फिर से काम नहीं किया। क्या यह फ़ाइल हर बार पार्स हो जाती है जब मैं अंदर जाने की कोशिश करता हूं? मेरे पास काम करने वाले उपयोगकर्ता के लिए ~ / .ssh / rc नहीं है, और या तो सिस्टम पर कोई / etc / ssh / sshrc फ़ाइल नहीं है।
तुलसी

ओह, मुझे लगता है कि मुझे ssh को फिर से संगठित करने की आवश्यकता है? /etc/init.d/sshd?
तुलसी

@ बासिल जी, आपको पुनः आरंभ करने की आवश्यकता है sshd। इसका मतलब यह भी है कि काम करने वाले सर्वर पर एक फ़ाइल हो सकती है (जो मैंने आपके लिए दी थी उसकी सूची की जांच करें sshd) जो पर्यावरण की स्थापना कर रही है।
एंड्रयू बी

हाँ, वह निराशाजनक हिस्सा था- मुझे जो कुछ भी चाहिए वह सब में सेट है। मुझे लगता है यह काम करेंगे।
तुलसी

मैंने अभी-अभी SSH को पुनर्निमित किया और मेरी गैर-संवादात्मक SSH कमांड अब काम कर रही हैं! आपकी मदद के लिए बहुत बहुत धन्यवाद, मैं अपने दम पर उस क्षेत्र को कभी नहीं मिला।
तुलसी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.