SSH (Ubuntu) का उपयोग करते समय ~ / .profile लोड नहीं होता है


22

उस समस्या को प्रतिबिंबित करने के लिए संपादित जिसे मैं वास्तव में हल करना चाहता था:

मुझे अपना माणिक वातावरण स्थापित करने की आवश्यकता है ताकि मैं कैपिस्ट्रानो के माध्यम से तैनात कर सकूं।

export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"

मैंने इन्हें ~ परिनियोजन / .profile में डाल दिया, लेकिन जब मैं इसमें ssh करता हूं, तो इन्हें चलाया नहीं जा रहा है। विचार?

मैं Ubuntu 12.04 चला रहा हूं।


मूल प्रश्न था:

जब मैं लोकलहोस्ट में किसी अन्य खाते में ssh करता हूं, तो यह मेरे .profile को लोड नहीं करता। मैं इसे लोड करने के लिए ssh को कैसे मजबूर कर सकता हूं? मैं Ubuntu 12.04 चला रहा हूं।

जवाबों:


15

आप स्पष्ट रूप से निर्दिष्ट कर सकते हैं कि आप एक इंटरेक्टिव लॉगिन शेल शुरू करना चाहते हैं:

 ssh user@host bash --login -i 

"भूमिका" की ~/.profile(। या ~ / bash_profile) और .bashrcssh के लिए कुछ अन्य फाइलें, (देखें है man sshजानकारी के लिए):

~ / .Ssh / पर्यावरण

पर्यावरण चर के लिए अतिरिक्त परिभाषाएं शामिल हैं; ऊपर देखें, पर्यावरण।

~ / .Ssh / rc

उपयोगकर्ता द्वारा शेल (या कमांड) शुरू होने से ठीक पहले, जब उपयोगकर्ता लॉग इन करता है, तो इस फाइल के कमांड को ssh द्वारा निष्पादित किया जाता है। अधिक जानकारी के लिए sshd (8) मैनुअल पेज देखें।


"आप हो सकता है" अक्सर सच नहीं होता है, क्योंकि ssh को किसी अन्य उपकरण (निरंतर वितरण) द्वारा चलाया जा रहा है और कमांड को आसानी से नहीं बदला जा सकता है।
जान हुडेक

6

.profileकेवल लॉगिन शेल के लिए लोड किया जाता है, जो ssh सत्र नहीं है (डिफ़ॉल्ट रूप से)। यदि आप सभी इंटरैक्टिव गोले के लिए स्टार्टअप पर कुछ चलाना चाहते हैं, तो इसे .bashrcइसके बजाय ( .zshrcया जो भी आपके शेल का उपयोग करता है) में डालें ।

इसके अलावा, यदि आप स्थानीय मशीन पर किसी अन्य खाते में लॉग इन करना चाहते हैं, तो ssh शायद ओवरकिल है। आप उपयोग करना चाह सकते हैंsu इसके बजाय या कुछ ।


3
ऐसा लगता .bashrcहै कि लोड नहीं है।
केनोरब

यह गलत है। यह है एक लॉगिन खोल। मैन पेज से: "यदि कमांड निर्दिष्ट है, तो इसे लॉगिन शेल के बजाय रिमोट होस्ट पर निष्पादित किया जाता है।"
mkj

~ / .जशेनव मेरे लिए काम करता है। unix.stackexchange.com/questions/4921/sh-startup-files-over-ssh
user91155

जब ssh को चलाने के लिए एक कमांड दी जाती है, तो यह एक tty आवंटित नहीं करने के लिए चूक करता है और फिर शेल "इंटरएक्टिव" भी नहीं होता है।
Jan Hudec

4

बैश का उपयोग करने के परिणामस्वरूप पढ़ना चाहिए ~/.bashrc। निम्नलिखित ksh और sh के साथ मदद कर सकता है (sh मोड में बैश), या जब ~/.bashrcलॉगिन के दौरान आपका निष्पादन नहीं होता है।

Sshd सलाह भी लेता है ~/.ssh/environment(जांच sshd_config (5) अनुमतियों के लिए) और ~/.ssh/sshrcया ~/.ssh/rc। यह सेटअप करने के लिए संभावना प्रदान करता है ENV=~/.profileया BASH_ENV=~/.profileऔरSSH_LOGIN=Y

में ~/.profileमैं निम्नलिखित लेआउट है (बदलें ENVसाथ BASH_ENVजब बैश का प्रयोग करके):


if [[ -n $SSH_LOGIN || -z $ENV ]]; then
     # Put here login initialization code
     unset SSH_LOGIN
     ENV=~/.profile
fi
 # Put here code thats get executed with each ksh/sh invocation


0

बैश ~/.profileकेवल तभी पढ़ता है जब यह एक लॉगिन शेल होता है और ~/.bash.bashrcकेवल तभी जब उसके पास टर्मिनल होता है, जिसमें से कोई भी ssh के साथ कमांड का आह्वान करते समय डिफ़ॉल्ट रूप से सही नहीं होता है। हालाँकि, सर्वर पर वातावरण सेट करने के लिए कई अन्य विकल्प हैं, दुर्भाग्य से सिस्टम सेटअप पर निर्भर करता है:

  • ज़श ~/.zshenvइस मामले में भी पढ़ता है ; हालांकि बैश के लिए कोई भी संगत फ़ाइल नहीं है।
  • यदि PermitUserEnvironmentविकल्प चालू है /etc/sshd_config, तो ssh पढ़ेगा ~/.ssh/environment। दुर्भाग्य से यह विकल्प बंद हो जाता है।
  • अगर इसमें pam_env.soकहा जाता user_readenv=1है /etc/pam.d/sshd, तो यह पढ़ेगा ~/.pam_environment। हालांकि यह मॉड्यूल का डिफ़ॉल्ट नहीं है, इसे कम से कम उबंटू में कहा जाता है
  • यदि अन्य सभी विफल हो जाते हैं, तो आप command=एक रैपर स्क्रिप्ट को कॉल करने वाली अधिकृत कुंजी फ़ाइल में एक निर्देश डाल सकते हैं जो पर्यावरण को सेट करता है और $SSH_ORIGINAL_COMMANDअंत में निष्पादित करता है (मैं कमांड शेल के लिए एक है, इसलिए यहां eval उपयुक्त है, लेकिन मुझे यकीन नहीं है) ।

0

आपके पास शायद एक है ~/.bash_profile, जो ओवरराइड करता है ~/.profile

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.