Bash_profile या bashrc चलाए बिना लॉगिन करें


75

तो चलिए बताते हैं कि एक टाइपो में कुछ ऐसा है .bashrcजो उसे (या उसे) प्रवेश करने से रोकता है ssh(यानी ssh लॉगिन फ़ाइल में त्रुटि के कारण बाहर निकलता है)। क्या कोई ऐसा तरीका है जो व्यक्ति इसे निष्पादित किए बिना लॉगिन कर सकता है (या .bashrcजब से एक दूसरे को चलाता है), या अन्यथा फ़ाइल को हटा / नाम बदलें / अमान्य करें?

मान लीजिए कि आपके पास मशीन तक भौतिक पहुँच नहीं है, और यह केवल उपयोगकर्ता खाता है जिसमें ssh की क्षमता है।

संदर्भ के लिए: .bash_profileइसमें शामिल हैं .bashrc:

[[ -f ~/.bashrc ]] && . ~/.bashrc

संपादित करें: चीजें जो मैंने कोशिश की हैं:

ssh user@host "rm ~/.bashrc"

scp nothing user@host:/RAID/home/tom/.bashrc

ssh user@host  "/bin/bash --norc"

सभी त्रुटि देते हैं:

/RAID/home/tom/.bashrc: line 16: /usr/local/bin/file: No such file or directory
/RAID/home/tom/.bashrc: line 16: exec: /usr/local/bin/file: cannot execute: No such file or directory

4
आपका scp कमांड काम नहीं करेगा क्योंकि कनेक्ट करते समय scp भी .bashrc पढ़ेगा। समस्या से बचने के लिए भविष्य में, आप / [ -z "$PS1" ] && return.Bashrc की शुरुआत में ऐसा कुछ जोड़ सकते हैं । इस तरह से scp ने पहली लाइन के बाद .bashrc को रोक दिया है, और आप आपातकाल के मामले में इसे ओवरराइट कर पाएंगे।
dalloliogm

जवाबों:


24

मुझे लगता है कि आपके एकमात्र विकल्प हैं:

  • दूसरे उपयोगकर्ता के रूप में ssh और आपके खाते में su;

  • ftp या smbclient जैसी किसी चीज़ का उपयोग करें, यदि संबंधित सेवाएं होस्ट पर सक्षम हैं;

  • एक खुली नेटवर्क सेवा में एक खुली भेद्यता खोजें और उसका शोषण करें :)।

  • समस्या को ठीक करने के लिए एक व्यवस्थापक प्राप्त करें।


4
"मान लीजिए कि आपके पास मशीन तक भौतिक पहुँच नहीं है, और यह केवल उपयोगकर्ता खाता है जिसमें ssh की क्षमता है।"
डेनिस विलियमसन

मैं इस मार्ग से नीचे जा रहा हूं। मैं इसे खोजने के बाद समाधान पोस्ट करूंगा। भाग्यवश, मेरे पास हमले के कुछ रास्ते हैं।
टॉम रिटर

1
अपने सर्वर में SFTP के लिए Filezilla का इस्तेमाल किया और यह मुझे तय किया। बहुत बहुत धन्यवाद, आपने मुझे बचा लिया। मेरे पास दुर्घटना से मेरी .bash_profile में "बाहर निकलने की 1" स्थिति थी और इसने मुझे घायल कर दिया।
djangofan

117

ssh -t username@hostname /bin/sh मेरे लिये कार्य करता है।


यह अच्छी तरह से काम करता है - सरल और एक शेल प्रदान करता है जिसका उपयोग आप समस्या को ठीक करने के लिए कर सकते हैं।
एमटी।

1
Google Chrome में सुरक्षित शेल ऐप ( chrome.google.com/webstore/detail/secure-shell/… ) के साथ ऐसा करने की कोशिश कर रहा है, लेकिन यह पता नहीं लगा सकता है कि कमांड लाइन के तर्कों को कैसे / कहाँ रखा जाए। कोई सुझाव?
बेंज

2
यह मेरे लिए काम नहीं करता (हालांकि यह मैन पेज के अनुसार होना चाहिए)। स्थानीय होस्ट ubuntu 14.04.1 पर चलता है और यह रिमोट होस्ट पर ubuntu 12.04.5 है। मैं rsync करने में असमर्थ हूं क्योंकि मेरा लॉगिन शेल tcsh है और दूरस्थ होस्ट पर यह कचरा प्रिंट करता है (tcsh: ऐसी कोई फ़ाइल या निर्देशिका tcsh: "/ u / levy" से शुरू करने की कोशिश नहीं कर रहा है - जो मुझे बताया गया है क्योंकि यह है निर्देशिका NSF घुड़सवार है)। मैंने सोचा था कि मैं लॉगिन शेल को दरकिनार कर समस्या को हल करूँगा लेकिन वह काम नहीं करता है।
सिल्वियो लेवी

2
यदि आपका डिफ़ॉल्ट शेल csh / tcsh है तो यह हमेशा आपके .cshrc/ .tcshrcयहां तक ​​कि गैर-संवादात्मक गोले के लिए भी स्रोत होगा ।
ब्रायन वंडेनबर्ग

मैं यहाँ बैठा हूँ मेरे अपने मूर्खता पर मेरे गधे बंद हँस इस मुद्दे पर मिल गया है करने के लिए। आपके समाधान ने बहुत काम किया। इस
टिंकरर को

36

मैं एक ही समस्या है, और किसी तरह इसे हल करने में सक्षम था। मैंने सिस्टम तक पहुंचने के लिए ssh का उपयोग किया, और जैसे ही मैंने सिस्टम में लॉग इन किया, Ctrl + c दबाया। तब, ~ / .bashrc नहीं पढ़ा गया था, और मैं इसे संशोधित करने में सक्षम था।


11
मैं
उलझन

यह प्रतिभा है!
user1747134

वास्तव में काम करता है ... धन्यवाद! अन्य तरीकों ने कभी मेरे लिए काम नहीं किया।
ज़्ज़ैच ...

मैक पर केवल
-bash_profile के साथ

OMG, मुझे लगा कि मैंने पूरा इंटरनेट खोज लिया है, फिर मैंने यह कोशिश करने का फैसला किया, और यह एकमात्र तरीका है जो मेरे लिए काम करता है! धन्यवाद!
जियाहो कै

21

मैंने जो नेटवर्क मॉनिटरिंग सॉफ़्टवेयर स्थापित किया था, उसमें वेब इंटरफ़ेस के माध्यम से रूट के रूप में कमांड निष्पादित करने के लिए मैंने प्रकाशित सीवीई का उपयोग किया। rm /RAID/home/tom/.bashrc

तब मैं लॉगिन और svn मेरे द्वारा किए गए परिवर्तनों को वापस ला सकता था।


11
यह एक ही समय में भयानक और असफल दोनों है।
मिकीबी

1
@TomRitter: कृपया वह ᴄᴠᴇ संदर्भ प्रदान करें।
user2284570

1
यह कैक्टि के एक oooold संस्करण में था, इसलिए जब तक आप 8-वर्षीय पुराने सॉफ़्टवेयर को नहीं चला रहे हैं मुझे नहीं लगता कि यह आपकी मदद करेगा। और अगर आप 8 साल पुराना सॉफ्टवेयर चला रहे हैं, तो मैं आपकी मदद नहीं कर सकता। ;)
टॉम रीटर

15

तुम एक) शुरू करने की आवश्यकता बैश के बिना source'ing या तो ~/.bashrcया ~/.bash_profileऔर ख) इस तरह के एक खोल एक पूर्ण लॉगिन खोल नहीं होगा क्योंकि कोई है / tty संलग्न, बल ssh एक संलग्न करने के लिए tty :

ssh -t user@host bash --norc --noprofile

3
यह काम करता है, लेकिन ध्यान दें कि आपके पास अपना सामान्य संकेत नहीं होगा, बस एक खाली स्क्रीन। lsखुद को समझाने की कोशिश करें कि आप :) में हैं। यह भी ध्यान दें कि यह एक dumbशब्द का उपयोग करेगा , इसलिए मेरे लिए नैनो काम नहीं करता है
सिप्रियन टॉमोयाग

7

तुम अभागे हो।

सभी ssh कमांड आपके लॉगिन शेल को चलाते हैं। ssh $COMMANDरन $SHELL -c $COMMAND, scpरन $SHELL -c /path/to/sftp-server, प्लेन sshसिर्फ आपका शेल चलाता है।


3
यह sftp के लिए भी सच है - यहां तक ​​कि SSH सबसिस्टम भी एक खोल के भीतर से निष्पादित होते हैं।
lxgr

मेरे अनुभव में आप सही हैं, भले ही ssh मैन पेज कहता है "यदि कमांड निर्दिष्ट है, तो इसे लॉगिन शेल के बजाय रिमोट होस्ट पर निष्पादित किया जाता है।" फिर भी पोस्टर उच्चतम-रेटेड उत्तर (ssh hostname / bin / sh) का उपयोग करके समस्या को हल करने में सक्षम था। क्या देता है?
सिल्वियो लेवी

@ सिल्वियो, ओपी का जवाब है कि उन्होंने एसएसएच से संबंधित नहीं एक शोषण का इस्तेमाल किया।
तोबू

सही। किसी ने उच्चतम-श्रेणी वाले उत्तर के साथ सफलता की सूचना दी और मैंने झट से मान लिया कि यह ओ.पी. काश, यह काम करता - मेरे पास एक समान स्थिति है, हालांकि यह केवल कष्टप्रद है न कि अपंग। (ऊपर दिए गए उच्चतम-उत्तर के तहत मेरी टिप्पणी देखें।)
सिल्वियो लेवी

6

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

इसके अतिरिक्त, अधिकांश लिनक्स सिस्टमों पर, निर्दिष्ट करना / बिन / sh कुछ भी नहीं करता है क्योंकि यह सिर्फ बैश करने के लिए एक सिमलिंक है!

परीक्षण करना चाहते हैं? आप .bashrc और .profile में "इको" स्टेटमेंट जोड़ें और देखें कि कौन सा रन है। मैंने किया। यहां देखें नतीजे

ssh user@hostनिष्पादित करेगा .bash_profile ssh user@host /bin/bash.bashrc निष्पादित करेगा, लेकिन यह सोचता है कि इसका गैर-संवादात्मक (कोई संकेत नहीं) है। ssh -t user@host /bin/bashनिष्पादित .bashrc दो बार ... एक बार लॉगिन पर, एक बार पारित आदेश के लिए, इसलिए किसी भी शेल को निर्दिष्ट करना हमेशा पहले चलाएगा। ssh -T user@hostके रूप में निर्दिष्ट नहीं है -T या -t बिल्कुल नहीं।

अब, यदि आप ध्यान दें, तो मेरा सिस्टम दोनों फाइलों को नहीं चला रहा है, केवल एक या दूसरे को। लेकिन मूल पोस्टर में .bash_profile रनिंग .bashrc, के लिए एक लाइन है, इसलिए .bashrc हमेशा किसी भी मामले को चलाने के लिए मिलेगा। वहाँ है कि लाइन नहीं होना चाहिए था! यदि वह रेखा मौजूद नहीं थी, तो आपको कोई समस्या नहीं होगी।

आपको कोई दूसरा तरीका खोजने या किसी व्यवस्थापक को ढूंढने की आवश्यकता होगी। यह वही है जो प्रवेश के लिए है।


कुछ अच्छे बिंदु; के रूप में आप की व्याख्या कोई निष्पादन योग्य पारित कर के रूप में एक आदेश में मदद कर सकते हैं, लेकिन कुछ हद तक एक विवादास्पद मुद्दे पर: अगर /bin/sh किया था पहले निष्पादित करने के लिए मिलता है, यह होगा मदद क्योंकि बैश नहीं करता लोड ~/.bashrcजब के रूप में लागू किया sh। यह उत्तर आपके अन्य उत्तर का सुपरसेट है, इसलिए कृपया अन्य को हटा दें।
mklement

3

कुछ इस तरह:

ssh host "/bin/bash --norc"

जो काम करने लगता है, लेकिन ध्यान दें कि PS1 सेट नहीं है इसलिए आप बिना प्रॉम्प्ट के कमांड टाइप करेंगे।

यह गैर-विनाशकारी होने का लाभ है।


1
यह काम नहीं करता है, इसने पहले एक सफल लॉगिन की कोशिश की, लेकिन लॉगिन नहीं कर सकता, और इसलिए bash --norc नहीं चला सकता
टॉम रिटर

2

प्रयत्न, कोशिश

echo ^C | ssh <hostname> ' rm .bashrc'

^ C कंट्रोल-वी है तो c है


1
यह मेरे सिस्टम पर ctrl-v और ctrl-c है। फिर भी धन्यवाद! :)
mzuther

2
ssh -t user@host "bash --norc --noprofile -c '/bin/rm .bashrc'"

यह मेरे लिए बहुत प्रतिबंधित वातावरण में काम करता है जब कुछ नहीं होगा। मुझे .bashrc के लिए पूर्ण पथ निर्दिष्ट करना पड़ा।
zbeekman

1

जब तक आप .bashrc से बाहर आते हैं, तब तक ctrl-C को मैशिंग करना तब तक काम करता है जब तक कि आप ctrl-C प्राप्त नहीं कर सकते। दुर्भाग्य से, अगर exitयह .bashrc में शुरुआती है, तो यह करना मुश्किल हो सकता है ।

आप इसे सीधे ssh करने के लिए पाइपिंग द्वारा जितनी जल्दी हो सके ctrl-C में डाल सकते हैं:

{ echo ^C; cat /dev/tty; } | ssh -tt user@host

ध्यान दें कि ^Cctrl-V की तरह टाइप किया गया है और उसके बाद ctrl-C।

यह एक एकल सीटीटी-सी को नियंत्रित टर्मिनल से इनपुट के बाद पाइप करता है, जबकि -ttएक पीडो-टर्मिनल को आवंटित करने के लिए मजबूर करता है। सभी ने कहा कि यह आपको (मशीन में कुछ हद तक विकृत) शेल देता है जबकि संभव के रूप में ज्यादा .bashrc को दरकिनार कर देता है।


0

आप कमांड .bash_profileका उपयोग करके एक खाली फ़ाइल के साथ ओवरराइट करने का प्रयास कर सकते हैं scp। मैंने जो googled किया है, उसमें से scp एक गैर-संवादात्मक लॉगिन का उपयोग करता है जो नहीं पढ़ता है .bash_profile


जब तक मैं (काल्पनिक रूप से) निर्देशिका संरचना को गलत तरीके से याद नहीं कर रहा हूं, और यह मुझे उस पर कोई त्रुटि नहीं दे रहा है, यह काम नहीं करता है - एसपीपी भी फ़ाइल को चलाता है।
टॉम रिटर

1
बात यह है कि लोगों को एहसास नहीं है कि scp कुछ खास नहीं है; यह सिर्फ एक और कमांड है जो ssh पर चलता है - जिसका अर्थ है एक इंटरैक्टिव ssh सत्र के लिए होने वाली हर चीज के बारे में है, जो कि scp के साथ हैप्पीनेस है।
लार्क्स

क्या sftp के बारे में, इसके ssh सबसिस्टम afaik।
अलो

0

आप बस bashrc फ़ाइल को भी हटा सकते हैं:

ssh <hostname> rm ~/.bashrc

समस्या .bash_profile फ़ाइल में है, bashrc में नहीं।
लॉरेंट इटिम्बे

1
यह काम नहीं करता है - यह पहले एक शेल के लिए प्रयास करता है और विफल रहता है।
टॉम रिटर

0

यदि आप सिस्टम सामान्य रूप से सेटअप करते हैं, तो .bash_profile एक गैर-इंटरैक्टिव शेल (जैसे कमांड चलाना) के लिए नहीं चलाया जाएगा।

चूँकि आपको समस्या .bash_profile फ़ाइल में है, इसलिए इसे बाहर ले जाने का प्रयास करें:

ssh user@host "mv ~/.bash_profile ~/.bash_profile_broken"

मुझे नहीं लगा कि फाइलों को किस तरह से जोड़ा गया है - - bash_profile .bashrc = (मैंने और जानकारी जोड़ी है।
टॉम रिटर

1
लेकिन जो लॉकी सुझाव दे रही है - जो बैश मैन पेज द्वारा पुष्टि की जाती है - वह यह है कि एक गैर-इंटरैक्टिव शेल या तो .bashrc या .bash_profile नहीं चलेगा। हालाँकि, जब आप ssh कमांड लाइन (जैसे इस उदाहरण में) पर कमांड पास करते हैं, तब भी बैश को "इंटरैक्टिव" शेल के रूप में शुरू किया जाता है, जिसका अर्थ है कि यह आपकी .bashrc फ़ाइल को पढ़ेगा। तो एक अच्छा विचार है, लेकिन दुर्भाग्य से ssh सहयोग नहीं करेगा।
लार्क्स

0

UH = 'user @ host'; ssh $ UH 'mv ~ / .bashrc ~ / letmein'; शश $ उह

कृपया कट और रन न करें, बदलें userऔर host, फिर संपादित करें letmeinऔर के रूप में सहेजें.bashrc


0

उपयोगकर्ता 60069 के लिए यश, यह मेरे लिए काम करता है, लेकिन मैं शेल-विशिष्ट स्टार्टअप फ़ाइल .bashrc का उपयोग करता हूं, इसलिए मेरे लिए / बिन / श के साथ लॉगिंग करना मेरे लिए काम करता है।

हालाँकि, यदि आप "ऐसी कोई किस्मत नहीं" स्थिति में हैं, तो मैं इस समाधान की पेशकश करता हूं, जो कि user60069 और डेनिस डब्ल्यू के समाधान पर आधारित है:

ssh -t you@host  /bin/bash --noprofile  --norc

डेनिस डब्ल्यू ने --norc विकल्प की पेशकश की, जो किसी ने कहा कि उनके लिए काम नहीं किया।

स्टार्ट अप फ़ाइलों को अक्षम करने के विकल्पों के लिए "मैन बैश" या "मैन (आपका शेल)" चलाएं। समस्या को ठीक करने में लगने वाले समय के लिए आपको केवल एक घृणित शेल का उपयोग करने की आवश्यकता है।


0

सर्वर पर लॉगिन करने का अन्य तरीका बिना प्रोफाइल के है, कृपया नीचे कमांड देखें
ssh -t user@host bash --noprofile

AWS के लिए pem फ़ाइल और कोई अन्य उपयोगकर्ता का उपयोग करना
ssh -ti "YOUR-PEM-FILE-NAME.pem" ec2-user@YOUR-IP-ADDRESS bash --noprofile

उम्मीद है की यह मदद करेगा!


-1

ऊपर दिए गए सुझावों और प्रतिक्रियाओं से, मैं कहूंगा कि यह .bashrc या .bash_profile फ़ाइलें नहीं है। इसके अलावा ssh manpage का कहना है कि यदि आप एक कमांड को निष्पादित करने के लिए निर्दिष्ट करते हैं तो आपकी प्रोफ़ाइल फ़ाइलों को पढ़ा नहीं जाएगा।

मेरा सुझाव है कि निरपेक्ष पथ से एक अलग लॉगिन शेल (ksh? Csh? Sh?) निष्पादित करने का प्रयास करें। इसके अलावा, सावधान रहें कि यह एक पूरी तरह से अलग समस्या हो सकती है (कोटा? निष्पादित करें और अपने घर निर्देशिका पर अनुमति पढ़ें?), इसलिए एक पक्ष दृष्टिकोण बेहतर होगा। क्या आप किसी अन्य उपयोगकर्ता को ls -la $YOUR_HOME_DIRपरिणाम करने के लिए कह सकते हैं और आपको मेल कर सकते हैं?

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