SSH लॉगिन पर एक कस्टम .bashrc फ़ाइल का उपयोग कैसे करें


21

मैंने पाया है कि मैं जिस नई कंपनी में काम कर रहा हूं, उसके साथ मुझे अक्सर अपेक्षाकृत कम जीवनकाल के साथ लिनक्स सर्वरों का उपयोग करना पड़ता है। इनमें से प्रत्येक सर्वर पर मेरा एक खाता है, लेकिन जब भी कोई नया बनाया जाता है, तो मुझे अपने .bashrc पर स्थानांतरित करने की परेशानी से गुजरना पड़ता है। हालाँकि यह संभव है कि लगभग एक महीने के समय में वह सर्वर आसपास नहीं रहेगा। मुझे कई अन्य सर्वरों को छोटी अवधि (मिनटों) के लिए एक्सेस करना होगा जहां यह सिर्फ मेरे .bashrc पर ट्रांसफर करने के लायक नहीं है, लेकिन जब से मैं बहुत सारे सर्वर पर काम कर रहा हूं, यह बहुत समय बर्बाद करता है।

मैं सर्वरों पर कुछ भी बदलना नहीं चाहता, लेकिन मैं सोच रहा था कि क्या "प्रति-कनेक्शन" .bashrc करने का कोई तरीका था, इसलिए जब भी मैं सर्वर पर SSH करूंगा तो उस सत्र के लिए मेरी सेटिंग्स का उपयोग किया जाएगा।

यदि यह संभव है, तो अच्छा होगा यदि मैं अन्य कॉन्फ़िगरेशन फ़ाइलों के साथ एक ही काम कर सकता हूं, जैसे कि gitconfig फाइलें।


यह एक प्रति-कनेक्शन समाधान नहीं है, लेकिन आप अभी भी इसे मूल्यवान पा सकते हैं। GitHub पर आधार देखें । सुपर उपयोगकर्ता समुदाय पर इस उत्तर में अधिक जानकारी ।
कोडवर्ड

जवाबों:


6

मुझे लगता है कि आप जो चाहते हैं (जिस मशीन से आप कनेक्ट करते हैं, उसमें आपका .ssh / config):

PermitLocalCommand yes
LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc

तो आप के साथ नेतृत्व कर सकते हैं:

source .bashrc

और अपने मीरा मार्ग पर हो। LocalCommand आपके वास्तविक सत्र से ठीक पहले आपके द्वारा कनेक्ट होने वाले सर्वर पर कमांड निष्पादित करता है।

मैं यह भी सुनिश्चित करूँगा कि सर्वर पर sshds को कॉन्फ़िगर किया गया है PermitLocalCommand yes

ऐसे कई तरीके हैं जिनसे आप लोकलकामैंड को अपने विशिष्ट वातावरण में काम करने के लिए बदल सकते हैं - आप आंतरिक वेब सर्वर से कर्ल कर सकते हैं, या उदाहरण के लिए एनएफ़एस माउंट से खींच सकते हैं।


नोटों की एक जोड़ी। सबसे पहले, मुझे लगता है कि आपने स्कैप कमांड में फाइलों के क्रम को बदल दिया है, क्योंकि मैं अपने बैश को सर्वर में स्थानांतरित करना चाहता हूं, और मुझे लगता है कि आपने इसे उलट दिया है। दूसरे, आप बस ; source /path/to/.bashrcस्‍कैप कमांड के बाद जोड़ सकते हैं ताकि यह स्‍वत: स्‍टार्ट हो जाए। अंत में, इस पद्धति का एक बहुत महत्वपूर्ण नकारात्मक यह है कि मुझे अपना पासवर्ड दो बार लिखना होगा। लेकिन अंत में यह काम किया, इसलिए धन्यवाद।
gsingh2011

उसके लिए माफ़ करना! मेरे सिर के बाहर काम कर रहा था, इसलिए मिक्सअप के बारे में खेद है। क्या आप अपने वातावरण में पासवर्ड रहित कुंजी सेटअप करने में सक्षम हैं? हमारे परिवेश में ऐसा है और यह एक सुंदर चीज है। खुशी है कि हालांकि काम किया!
क्विन मर्फी

@ gsingh2011: उस source /path/to/.bashrcमशीन पर निष्पादित किया जाएगा जिसे आप कनेक्ट कर रहे हैं। में आदेश LocalCommandssh सत्र के लिए कोई उपयोग कर सकते है।
ओलिवर

@ आप सही हैं। मैंने दूरस्थ कंप्यूटर से .bashrc की सोर्सिंग को स्वचालित करने के लिए समझौता किया है। मुझे पहले लॉगिन पर सर्वर की ओर से कुछ चीजें बदलनी होंगी, लेकिन यह मेरे लिए पहले की तुलना में कहीं अधिक सुविधाजनक है।
gsingh2011

16

मुझे लगता है कि sshrc वही है जो आप ढूंढ रहे हैं: https://github.com/Russell91/sshrc

sshrc ssh की तरह ही काम करता है, लेकिन यह दूरस्थ रूप से लॉग इन करने के बाद भी स्रोत / / .sshrc करता है।

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

आप इसका उपयोग पर्यावरण चर सेट करने, फ़ंक्शंस को परिभाषित करने और पोस्ट-लॉगिन कमांड चलाने के लिए कर सकते हैं। यह इतना आसान है, और यह सर्वर पर अन्य उपयोगकर्ताओं को प्रभावित नहीं करेगा - भले ही वे sshrc का उपयोग करें। अधिक उन्नत कॉन्फ़िगरेशन के लिए, पढ़ना जारी रखें।


कृपया लिंक केवल पोस्ट के साथ स्पैम करना बंद करें। आप पूरी तरह से टिप्पणी जोड़ने में सक्षम हैं (जो आपके sshrc- संबंधित पोस्ट हैं, वैसे भी)।
हिरण

3
मैं उन सभी को ठीक करने पर काम कर रहा हूँ!
रसेलस्टवर्ट सेप

किया हुआ। पहली बार मुझे केवल लघु-लिंक पोस्ट करने के लिए लुभाया गया था। अब मैं बेहतर जानता हूं।
रसेलस्टवर्ट

1
मैंने बहुत पहले लिखा था (sshrc से पहले) एक simil sshrc: github.com/fsquillace/pearl-ssh यह सिर्फ अधिक कुशल, छोटा और बिना xxd निर्भरता के है।
user967489

1

यदि आपने पहले कभी सर्वर को हिट नहीं किया है, तो इसके लिए ~ / .ssh / ज्ञात_होस्ट में कोई प्रविष्टि नहीं होगी।

आप किसी दिए गए होस्ट को "ssh-keygen -F" के साथ खोज सकते हैं, लेकिन आपको उस आउटपुट (grep) का परीक्षण करना होगा क्योंकि ssh-keygen एक मिस के लिए गलत नहीं है। ध्यान दें कि यदि आप अलग-अलग पहचानकर्ताओं (आईपी पते, होस्टनाम, एफक्यूएनडी) द्वारा एक मेजबान का उल्लेख करते हैं, तो प्रत्येक को अलग-अलग उदाहरणों के रूप में माना जाता है।

आप ssh के लिए एक रैपर लिख सकते हैं जो आपके उपयोगकर्ता वातावरण को पहले लॉगिन पर उस होस्ट में स्थानांतरित करता है:

ssh-newenv () {अगर! ssh-keygen -F $ 1 | grep -q "^ # होस्ट $ 1 मिला:"; फिर rsync ~ / .bashrc ~ / .bash_profile ~ / .bash_logout $ a:; फाई; ssh $ 1; }

यदि आप इसे और अधिक मजबूत बनाना चाहते हैं, तो आप दूरस्थ होस्ट पर एक ज्ञात पर्यावरण फ़ाइल, हैश या अन्य मार्कर के अस्तित्व की जांच कर सकते हैं।


0

मैं नहीं जानता कि क्या कोई सत्र है ।bashrc

एक अन्य समाधान एक छोटी स्क्रिप्ट लिखना होगा जो आपके सभी पसंदीदा कॉन्फ़िगरेशन को आपके नए होम फ़ोल्डर में स्थानांतरित करता है।

हो सकता है कि पथ के साथ अपने सभी कॉन्फ़िगरेशन के साथ फ़ोल्डर बनाएं और बस उन्हें scp के साथ स्थानांतरित करें

पसंद

/home/foobar/configs/.bashrc
/home/foobar/configs/.foo/bar.conf
...

और फिर ए

scp -r /home/foobar/configs/* foo@example.com:/home/foo/

जिससे समय की बचत होती है।


0

मुझे नहीं लगता कि यह संभव है, यह देखते हुए कि ssh का आपके साथ कोई लेना-देना नहीं है .bashrc। यह शेल है जो उस फाइल को लोड करता है, ssh को नहीं।

कुछ विचार:

  1. जब आप पहली बार लॉग इन करते हैं तो अपने दूरस्थ होम डायरेक्टरी को सेट करें।
  2. हर सर्वर पर अपने .bashrc युक्त अपने घर निर्देशिका माउंट करने के लिए NFS का उपयोग करें। इस तरह, आपके पास हर जगह समान सेटिंग्स हैं।
  3. यदि आप दूरस्थ सर्वर पर प्रसारित कुछ पर्यावरण चर के साथ ठीक हैं, तो आपको SendEnvविकल्प देखना चाहिए ( ssh_configअधिक जानकारी के लिए मैन पेज देखें)। यदि सर्वर सही तरीके से सेट है (यानी AcceptEnvsshd_config में यह पर्याप्त है), तो आप SendEnvदूरस्थ होस्ट पर अपने पर्यावरण चर को कॉपी करने के लिए उपयोग कर सकते हैं ।
  4. मुझे नहीं पता कि यह काम करता है, लेकिन शायद आप दूरस्थ होस्ट से कनेक्ट करने से पहले अपनी या अन्य फ़ाइलों को भेजने के लिए ProxyCommandसेटिंग ( ssh_configमैन पेज देखें ) का गलत उपयोग कर सकते हैं .bashrc। हालांकि इसके लिए कुछ परीक्षण की आवश्यकता होगी। इसके अलावा, तैयार रहें कि यह scp के साथ हस्तक्षेप कर सकता है।

0

मुझे लगता है कि https://github.com/fsquillace/pearl-ssh वही करता है जो आपको चाहिए।

मैंने इसे sshrc के जन्म से बहुत पहले लिखा था और sshrc की तुलना में इसके और भी लाभ हैं:

  • इसे दोनों मेजबानों के लिए xxd पर निर्भरता की आवश्यकता नहीं है (जो दूरस्थ होस्ट पर अनुपलब्ध हो सकता है)
  • पर्ल-एसएचएस एक अधिक कुशल एन्कोडिंग एल्गोरिथ्म का उपयोग करता है
  • यह कोड की सिर्फ 20 पंक्तियाँ है (वास्तव में समझने में आसान है!)

उदाहरण के लिए:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.