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


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

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

सन्दर्भ के लिए: .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

66
2017-12-15 12:03


मूल


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


जवाब:


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

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

  • होस्ट पर प्रासंगिक सेवाएं सक्षम होने पर ftp या smbclient जैसे कुछ का उपयोग करें;

  • एक खुली नेटवर्क सेवा में खुली भेद्यता पाएं और इसका फायदा उठाएं :)।

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


18
2017-12-15 14:32



"मान लीजिए कि आपके पास मशीन तक भौतिक पहुंच नहीं है, और यह एकमात्र उपयोगकर्ता खाता है जिसमें ssh में क्षमता है।" - Dennis Williamson
मैं इस मार्ग से नीचे जा रहा हूँ। मैं इसे खोजने के बाद समाधान पोस्ट करूंगा। सौभाग्य से, मेरे पास हमले के कुछ रास्ते हैं। - Tom Ritter
मेरे सर्वर में SFTP के लिए Filezilla का उपयोग किया और यह मुझे तय किया। बहुत बहुत धन्यवाद, आपने मुझे बचाया। मेरे पास दुर्घटना से मेरे .bash_profile में "निकास 1" स्थिति थी और उसने मुझे रोक दिया। - djangofan


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


96
2017-11-12 14:22



यह अच्छी तरह से सरल काम करता है और एक खोल प्रदान करता है जिसका उपयोग आप समस्या को ठीक करने के लिए कर सकते हैं। - MT.
तुमने अभी मेरी जिंदगी बचाई धन्यवाद। - Leo
Google क्रोम में सुरक्षित शेल ऐप के साथ ऐसा करने का प्रयास कर रहा है (chrome.google.com/webstore/detail/secure-shell/...) लेकिन यह पता नहीं लगा सकता कि कमांड लाइन तर्क कैसे / कहां रखना है। कोई सुझाव? - Benj
यह मेरे लिए काम नहीं करता है (हालांकि यह मैन पेज के अनुसार होना चाहिए)। स्थानीय मेजबान उबंटू 14.04.1 चलाता है और यह रिमोट होस्ट पर उबंटू 12.04.5 है। मैं rsync करने में असमर्थ हूं क्योंकि मेरा लॉगिन खोल tcsh है और रिमोट होस्ट पर यह कचरा प्रिंट करता है (tcsh: ऐसी कोई फ़ाइल या निर्देशिका tcsh: "/ u / levy" से शुरू करने का प्रयास कर रहा है - जिसे मुझे बताया गया है क्योंकि निर्देशिका एनएसएफ घुड़सवार है)। मैंने सोचा कि मैं लॉगिन खोल को छोड़कर समस्या हल कर दूंगा लेकिन यह काम नहीं करता है। - Silvio Levy
यदि आपका डिफ़ॉल्ट खोल csh / tcsh है तो यह होगा हमेशा आपका स्रोत .cshrc/.tcshrc गैर-इंटरैक्टिव गोले के लिए भी। - Brian Vandenberg


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


27
2018-02-18 22:12



मैं संदेह था, लेकिन यह वास्तव में काम करता है ... - rmobis
यह प्रतिभा है! - user1747134
असल में काम करता है ... धन्यवाद! अन्य तरीकों ने कभी मेरे लिए काम नहीं किया। - Zzzach...
मैक पर केवल एक .bash_profile के साथ, यह मेरे लिए काम किया :) - AnneTheAgile
ओएमजी, मैंने सोचा कि मैंने पूरे इंटरनेट की खोज की है, तो मैंने इसे आजमाने का फैसला किया, और यह एकमात्र तरीका है जो मेरे लिए काम करता है! धन्यवाद! - Jiahao


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

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


20
2017-12-19 17:54



यह एक ही समय में भयानक और असफल दोनों है। - MikeyB
@ टॉम्रिटर: कृपया उस संदर्भ को प्रदान करें। - user2284570
यह कैक्टि के एक ओउल्ड संस्करण में था, इसलिए जब तक कि आप 8 साल के पुराने सॉफ्टवेयर नहीं चला रहे हैं, मुझे नहीं लगता कि इससे आपकी मदद मिलेगी। और यदि आप 8 साल पुराने सॉफ्टवेयर चला रहे हैं, तो मैं आपकी मदद नहीं कर सकता। ;) - Tom Ritter


आपको एक की जरूरत है) शुरू करें दे घुमा के के बिना sourceया तो ~/.bashrc या ~/.bash_profile और बी) चूंकि ऐसा शेल एक पूर्ण लॉगिन शेल नहीं होगा / नहीं tty संलग्न, बल ssh एक संलग्न करने के लिए tty:

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

11
2018-02-17 12:51



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


तुम अभागे हो।

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


6
2017-12-15 13:29



यह एसएफटीपी के लिए भी सच है - एसएसएच उपप्रणाली को भी एक खोल के भीतर से निष्पादित किया जाता है। - lxgr
मेरे अनुभव में आप सही हैं, भले ही एसएसएच मैन पेज कहता है "अगर कमांड निर्दिष्ट है, तो इसे लॉगिन शेल के बजाय रिमोट होस्ट पर निष्पादित किया जाता है।" फिर भी पोस्टर उच्चतम रेटेड उत्तर (एसएसएच होस्टनाम / बिन / श) का उपयोग कर समस्या को हल करने में सक्षम था। क्या देता है? - Silvio Levy
@ सिल्वियो, ओपी का जवाब यह है कि उन्होंने एसएसएच से संबंधित एक शोषण का उपयोग नहीं किया। - Tobu
सही। किसी ने उच्चतम रेटेड उत्तर के साथ सफलता की सूचना दी और मैंने जल्दी ही यह माना कि यह ओपी था। मेरी इच्छा है कि यह काम करे - मेरे पास एक समान स्थिति है, हालांकि यह केवल परेशान नहीं है। (उपरोक्त उच्चतम रेटेड उत्तर के तहत मेरी टिप्पणी देखें।) - Silvio Levy


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

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

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

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

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

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


5
2017-07-25 06:52



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