मेरे PS1 ssh पर जोर देना


19

मैं एक विशिष्ट "PS1" संकेत का उपयोग करता हूं जो मुझे पसंद है। मैं कुछ अलग सर्वर पर अन्य लोगों के साथ कुछ लॉगिन साझा करता हूं। मुझे आश्चर्य हो रहा था कि क्या मेरी लोकल बैश प्रोफाइल में रिमोट प्रॉम्प्ट, या किसी अन्य तरीके से निर्दिष्ट करने का कोई तरीका है, जब मैं रिमोट में हर बार कॉपी और पेस्ट करता हूं।

जवाबों:


17

प्रत्येक दूरस्थ मशीन पर एक फ़ाइल अपलोड करें ~/.my_custom_bashrc, अपने कस्टम bashकॉन्फ़िगरेशन के साथ, (इस मामले में PS1=...) फिर से लॉन्च sshकरें:

ssh user@host -t "bash --rcfile ~/.my_custom_bashrc -i"

आप bashपठनीयता के लिए एक फ़ंक्शन को रैपर के रूप में आसानी से उपयोग कर सकते हैं ।


10

यदि आप केवल PS1चर भेजना चाहते हैं , और इसमें एक '(एक उद्धरण) नहीं है, तो कोशिश करें:

ssh targethost -t "PS1='$PS1'; exec bash"

स्थानीय हालांकि .bashrcअच्छी तरह से अधिलेखित हो सकता है PS1( यह इंगित करने के लिए डेनिस विलियमसन के लिए धन्यवाद )।

Ssh पर पर्यावरण चर को प्रसारित करने के तरीके हैं , लेकिन वे आमतौर पर सर्वर कॉन्फ़िगरेशन में अक्षम होते हैं। यदि सर्वर कॉन्फ़िगरेशनPermitUserEnvironment में निर्देश सक्षम है और प्रत्येक उपयोगकर्ता की अपनी कुंजी जोड़ी है (हाँ, तो आप बहुत भाग्यशाली नहीं हो सकते हैं), आप अपनी कुंजी के अनुरूप लाइन में जोड़ सकते हैं ।environment="PS1=…"~/.ssh/authorized_keys

यदि आप किसी साझा उपयोगकर्ता खाते पर अपना कॉन्फ़िगरेशन रखना चाहते हैं, तो आप अपनी स्वयं की कॉन्फ़िगरेशन फ़ाइल निर्देशिका बना सकते हैं और HOMEउस निर्देशिका को इंगित करने के लिए पर्यावरण चर सेट कर सकते हैं ।

ssh targethost mkdir mrstatic.home
scp .bashrc targethost:mrstatic.home/

mrstatic.homeजब आप अन्य उपयोगकर्ताओं के साथ फ़ाइल साझा करना चाहते हैं, तो मूल निर्देशिका में संबंधित प्रविष्टि की ओर इशारा करते हुए निर्देशिका में प्रतीकात्मक लिंक बनाएं ।

फिर, लॉग इन करें

ssh targethost -t 'HOME=~/mrstatic.home; exec bash'`

यदि आप रिमोट .profile(या अन्य आरंभीकरण फ़ाइल) को संशोधित करने के लिए तैयार हैं , तो आप संभवतः अपनी सेटिंग्स को स्वचालित कर सकते हैं। कई साइटें LC_*पर्यावरण चर के माध्यम से अनुमति देती हैं (आमतौर पर वे स्थानीय सेटिंग्स के लिए उपयोग की जाती हैं)। यदि ये दोनों स्थितियां पूरी होती हैं, तो आप एक चर सेट कर सकते हैं जो वास्तव में स्थानों के लिए उपयोग नहीं किया जाता है, कहते हैं LC_USER, क्लाइंट की तरफ, और सर्वर में इसका परीक्षण करें .profile

(बेशक साझा खाते एक बुरा विचार हैं, लेकिन मुझे लगता है कि आप उस स्थिति को बदलने की स्थिति में नहीं हो सकते हैं।)


3
ssh -t user@host "remote='$PS1' bash -i"

फिर, प्रॉम्प्ट पर:

PS1=$remote

1
यदि यह उद्धृत नहीं किया जाता है तो एक परिष्कृत बैश प्रॉम्प्ट टूट सकता है (आप से आ रहा है, मुझे आश्चर्य है)। और क्यों अतिरिक्त कमांड, और न सिर्फ "PS1='$PS1' bash -i"(और क्यों नहीं exec, भी)?
गाइल्स का SO- बुराई से दूर रहना '

1
@ गिल्स: मिसिंग कोटिंग: स्लोपनेस। अतिरिक्त कमांड: PS1शेल स्टार्टअप के दौरान ओवरराइट करना असामान्य नहीं होगा । कोई निष्पादन नहीं: मेरे सिस्टम पर परीक्षण के दौरान यह कोई फर्क नहीं पड़ता था - कोई अतिरिक्त प्रक्रिया नहीं।
अगली सूचना तक रोक दिया गया।

1
ओह, हाँ, यह एक अच्छा बिंदु है, स्थानीय .bashrcको अधिलेखित करने की संभावना है PS1
गिलेस एसओ- 14:12

2

अपने PS1 प्रॉम्प्ट को ~ / .ssh / वातावरण में डालें और ssh सत्र इसे आपके द्वारा लॉगिन किए गए प्रत्येक होस्ट तक ले जाएगा। यह मेरे लिए ओपनश 4.3p2 के साथ काम करता है।


1
यह केवल तभी काम करता है जब सर्वर का कॉन्फ़िगरेशन सक्षम हो PermitUserEnvironment, जो डिफ़ॉल्ट रूप से बंद हो।
फ्लिमल जूल

1

आप क्लाइंट चर पर पर्यावरण चर निर्दिष्ट कर सकते हैं और अगर ssh- सर्वर इसे अनुमति देता है (आदमी sshd-config की जाँच करें), इन चर को सत्र में कॉपी किया जाता है जब आप मशीन में लॉग इन करते हैं।

इसलिए, आपको एक मौजूदा PS1 (या जो भी चर) की जांच करने के लिए सर्वर पर .bashrc को कॉन्फ़िगर करना होगा और पहले से सेट नहीं होने पर केवल PS1 सेट करें।

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


1

लॉगिन साझा न करें। खुद के रूप में एसएसएच, फिर करो sudo -su shareduser( -sमतलब "शेल")।

बनाओ sudoअपने घर निर्देशिका रखें:

Defaults env_keep += "HOME"

जब मुझे पदोन्नत किया जाता है तो मैं उस नीति को लागू करने और लागू करने की कोशिश करूंगा, लेकिन अभी मैं इसके लिए फंस गया हूं।
अनफंडेडनट

1

यदि आप इसे एक अतिरिक्त scp की आवश्यकता के बिना करना चाहते हैं तो आप कुछ इस तरह कर सकते हैं:

ssh -t srvname ' cp ~/.bashrc ~/.bashrc.n &>/dev/null ; echo "LS_COLORS=\"no=00:fi=00:ETC:ETC:ETC\";" >> ~/.bashrc.n ; echo "export LS_COLORS" >> ~/.bashrc.n ; echo "alias ls=\"ls --color=auto\";" >> ~/.bashrc.n ; exec bash --rcfile ~/.bashrc.n'

यह सर्वर bashrc पर आपके ओवरराइड के साथ आधारित .bashrc.n उत्पन्न करेगा।


यही कारण है कि कुछ लोग टर्मिनलों से डरते हैं।

0

यदि आप अपने सहयोगियों पर स्पष्ट रूप से दखल देने के लिए तैयार हैं, और आप उन पर भरोसा कर सकते हैं कि वे आपकी प्राथमिकता के साथ हस्तक्षेप न करें, तो मैं सीरस के उत्तर , अकीरा के उत्तर और डेनिस विलियमसन के उत्तर के संयोजन का सुझाव देता हूं ।

  1. प्रत्येक सर्वर पर, संपादित करें ~/.bashrcऔर जोड़ें
    अगर ["$ Unf" = 1] # Unfundednut के लिए विशेष कोड
    फिर
        PS1 = " (आपका इच्छित शीघ्र) "
         (कोई अन्य अनुकूलन जो आप चाहते हैं) 
    फाई
    अतं मै। हालांकि आपके सहकर्मी "आधार प्रोफाइल पर लिखने वाले [आप] की सराहना नहीं करेंगे", जब तक वे इसकी तलाश में नहीं जाते, उन्हें इसके बारे में जानकारी नहीं होगी।
  2. जब आप किसी दूरस्थ सर्वर पर लॉगिन करते हैं, तो करते हैं
    ssh -t user @ host "Unf = 1 bash -i"
    जबकि आप शायद अपने स्थानीय खाते में एक उपनाम या शेल फ़ंक्शन में रखना चाहते हैं, यह बहुत कम है - अन्य उत्तरों में से किसी से भी कम - कि आप आसानी से इसे मैन्युअल रूप से टाइप कर सकते हैं।

मेरा मानना ​​है कि यह बिल्कुल स्पष्ट है, लेकिन: जब आप लॉग इन करते हैं तो sshकमांड Unfरिमोट सर्वर पर चर सेट करता है। यह आपके कोड को रिमोट में लागू करेगा .bashrc, जो आपके कस्टमाइज़ेशन को प्रभावी करेगा। चूंकि आप अपना कोड इसके अंत में रखते हैं .bashrc, इसलिए यह फ़ाइल में पहले की सामान्य सेटिंग्स को ओवरराइड कर देगा।

प्रकटीकरण: मैंने यह परीक्षण नहीं किया है।


-1

सबसे आसान तरीका है IMHO:

ssh user@server 'PROMPT_COMMAND=export PS1="changeme $" bash -li;'

मुझे यकीन नहीं है कि काम करता है; ऐसा लगता है कि उद्धरणों की एक परत गायब है। यहां तक ​​कि अगर यह किया था, सेटिंग PROMPT_COMMAND(जो हर बार शेल शीघ्र जारी करता है) इस समस्या को हल करने का एक बहुत भारी हाथ लगता है। और, चूंकि यह कुछ हद तक रहस्यमय है, इसलिए इसका जवाब देने वाले किसी भी उत्तर में वास्तव में इसका विवरण होना चाहिए कि यह कैसे काम करता है।
स्कॉट

-2

आप अपने घर को sshfs / nfs पर माउंट करने जैसा सामान कर सकते हैं, लेकिन सबसे आसान उपाय यह है कि आप अपने bashrc को नई मशीन में फैलाएं। यह भी उपनाम और सामान लाता है।


जैसा कि मैंने अपने प्रश्न में कहा था कि मैं इन लॉगिन को अन्य लोगों के साथ साझा करता हूं। मुझे पूरा यकीन है कि वे मुझे आधार प्रोफाइल पर लिखने की सराहना नहीं करेंगे।
अनफंडनटेड

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