Ssh कमांड चलाते समय PATH कैसे सेट करें?


18

मान लें कि उपयोगकर्ता के पास /bin/bashशेल है /etc/passwd। फिर ssh user@host commandबैश का उपयोग करके कमांड चलाता है। हालाँकि, वह शेल न तो लॉगिन और न ही इंटरेक्टिव है, जिसका अर्थ है कि न तो ~/.bash_profileखट्टा ~/.bashrcहै और न ही । उस स्थिति में PATHपर्यावरण चर को कैसे सेट किया जाए ताकि निष्पादन योग्य पाए जा सकें और निष्पादित हो सकें? क्या वास्तविक कमांड के साथ उपसर्ग करने की सिफारिश की गई है source ~/.bashrc?


5
.bashrcखट्टा है, लेकिन यह संभवतः शीर्ष पर अन्तरक्रियाशीलता के लिए एक परीक्षण है। आपके द्वारा उस चेक को लागू करने से पहले रखी जाने वाली चीजें, और यही वह है जो मैं तब करता है जब सर्वर उपयोगकर्ता के वातावरण या उपयोग की अनुमति नहीं देता है ~/.pam_environment
मूरू

जवाबों:


18

आपके पास कुछ संभावनाएँ हैं:

  • ठीक PATHसर्वर में~/.ssh/environment (द्वारा सक्षम किए PermitUserEnvironment yesजाने की आवश्यकता है sshd_config)।
  • बाइनरी के लिए पूर्ण पथ का उपयोग करें
  • जैसा कि आपने उल्लेख किया है, मैन्युअल रूप से .bashrc: कमांड के साथ उपसर्ग . ~/.bashrc(याsource ) के

यह बहुत उपयोग के मामले पर निर्भर करता है कि आप किस रास्ते पर जाएंगे।


6
मैन्युअल रूप से सोर्सिंग ~/.bashrcशून्य नहीं है, यह डिफ़ॉल्ट रूप से होता है। यह सच है, यह मुझे एक बुरा विचार की तरह लगता है।
टोना टोटका

$PATH~/.ssh/environmentकम से कम नहीं में से विस्तार नहीं करता है OpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019
जाकोको

1
@ जाकोको संभवतः sshd_config का उपयोग करके अक्षम किया गया है PermitUserEnvironment(हाल के संस्करणों में डिफ़ॉल्ट)
जकूज़ी

मुझे यह समझ में आया, इसका विस्तार नहीं हो रहा था क्योंकि मैंने PATH="$PATH:/new/path"अपनी एक लाइन जोड़ी थी ~/.ssh/environmentजब इसे होना चाहिए थाPATH=$PATH:/new/path
जाको

4

आप स्थानीय सेटिंग्स को दूरस्थ सेटिंग्स के बराबर कर रहे हैं।

स्थानीय रूप से, उदाहरण के लिए, वर्तमान चल रहा शेल जिसमें आप लिखते हैं:

ssh user@host command

क्लाइंट ssh के रूप में कमांड ssh (अधिक कुछ नहीं) को निष्पादित करेगा।
ऐसा करने के लिए स्थानीय शेल को एक उप-शेल या एक नया शेल या लॉगिन शुरू करने की आवश्यकता नहीं है।

कमांड को ए के रूप में निष्पादित किया जाता है ls है: स्थानीय रूप से।

यह क्लाइंट ssh कमांड है जो एक नेटवर्क सिस्टम को रिमोट सिस्टम से खोलता है, जहां, यदि सही तरीके से प्रमाणित किया गया है, तो ए किया जाता है, तो ssh के तर्क के रूप में लिखी गई कमांड को निष्पादित करने के लिए नया शेल शुरू किया जाएगा, या, यदि कोई तर्क नहीं दिया जाता है, तो आगे के कमांड की अपेक्षा करें उस संबंध पर।

वह नया रिमोट शेल आवश्यक रूप से एक लॉगिन शेल होगा क्योंकि रिमोट यूजर (उस सिस्टम के लिए) को लॉगिन करने के लिए प्रमाणीकृत होना चाहिए। या, यदि कुछ विशिष्ट कमांड दी जाती है, तो प्रमाणित उपयोगकर्ता विशेषाधिकारों के साथ ऐसी कमांड को चलाएं।

आप देख सकते हैं कि $file sourcedप्रत्येक फ़ाइल के आरंभ में ( रिमोट सिस्टम में) जोड़कर कौन सी फाइलें खट्टी हैं (रूट को /etc/फाइल बदलने की जरूरत है ):

$ a=(~/.bashrc ~/.profile /etc/bash.bashrc /etc/profile)
$ for f in "${a[@]}"; do sed -i '1 i\echo "'"$f"' was read"\n' "$f"; done

और फिर बस एक ssh कंसोल शुरू करें:

$ ssh sorontar@localhost
/etc/profile was read
/etc/bash.bashrc was read
/home/sorontar/.profile was read
/home/sorontar/.bashrc was read

इस मामले में, दोनों bashrcफ़ाइलों को पढ़ा गया क्योंकि प्रत्येक profileफ़ाइल में उन्हें शामिल करने की आज्ञा थी, इसलिए नहीं कि लॉगिन शेल ने उन्हें सीधे खट्टा कर दिया।

$ ssh sorontar@localhost :
/etc/bash.bashrc was read
/home/sorontar/.bashrc was read

इस प्रणाली में, जहां bashrcदोनों मामलों में पढ़ा जाता है।

source ~/.bashrcनिष्पादित करने के लिए कमांड को जोड़ने की आवश्यकता नहीं है ।

पाथ बदलें

आपको केवल "$ PATH" को बदलने के लिए सही सेटिंग्स को शामिल करना होगा, या तो /etc/bash.bashrcउन सभी उपयोगकर्ताओं के लिए जो इस प्रणाली में एक शेल शुरू करते हैं। या ~/.bashrcप्रत्येक उपयोगकर्ता के लिए जिसे इसकी आवश्यकता है। आप किसी भी नए उपयोगकर्ता .bashrcको बनाने के /etc/skel/लिए एक उपयोगकर्ता का कंकाल जोड़ सकते हैं (या संपादित कर सकते हैं) उसके पास सही फ़ाइल उपलब्ध है।

उपरोक्त केवल बैश के लिए मान्य है। यदि आपको सभी शेल के लिए काम करने के लिए सेटिंग की आवश्यकता है, तो संभवतः ~/.ssh/environmentप्रत्येक उपयोगकर्ता के लिए ssh फ़ाइल का उपयोग करके पर्यावरण चर पथ की स्थापना करना। या /etc/ssh/sshrcसिस्टम में एक वैश्विक सेटिंग के लिए उपयोग करें जहां ssh सर्वर चल रहा है (कृपया man sshdकुछ अतिरिक्त विवरण के लिए फ़ाइलें अनुभाग पढ़ें )।

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