अजीब SSH मुद्दा, ssh -t के साथ काम करता है, लेकिन इसके बिना जमा देता है


13

जब मैं sshअपने सर्वर में से एक में, यह लॉग इन करने के लिए लगता है, लेकिन फिर मुझे शीघ्र ( message debug2: shell request accepted on channel 0 is the last log entry) देने से पहले लटका देता है ।

हालांकि अजीब बात है ssh -t "/bin/bash"जब sshकाम नहीं करता है।

मुझे अब तक क्या पता चला है

  • मैं सामान्य रूप से एक ही भौगोलिक स्थिति में सर्वर से ठीक लॉग इन कर सकता हूं
  • यदि मैं ssh -t '/bin/bash'- मैं किसी भी स्थान से पूरी तरह से लॉग इन कर सकता हूं।
  • यदि मैं सर्वर का उपयोग rsync करता हूं , तो यह काम करने लगता है, और फिर ताले
  • अगर मैं सर्वर rsync से उपयोग करता हूं , तो यह बिना किसी समस्या के काम करता है

मैंने क्या कोशिश की है

  • सभी लॉगिन विकल्पों को हटाना या बदलना .profile,.bashrc /etc/profile
  • ssh_config और / या sshd_config एक समान सर्वर से बदलना जो ठीक काम करता है
  • मैंने रूटिंग की जाँच की है
  • मैंने tcpdumpबिना किसी लाभ के एक नेटवर्क विशेषज्ञ की जांच की है (हालांकि लगता है कि बहुत सारे पुन: प्रसारण होंगे)

मैं वास्तव में कुछ और नहीं सोच सकता

इसके अलावा एक डोडी नेटवर्क कार्ड ड्राइवर / फर्मवेयर।


क्या इसमें कोई matchबयान हैं sshd_config? क्या केवल sshdचलाने का एक उदाहरण है ?
हौके लागिंग

3
यदि आप स्थानीय स्तर पर ssh करते हैं तो क्या होगा? VM से उसी भौतिक मशीन पर होस्ट किया गया है? उसी नेटवर्क सेगमेंट से? यदि आप अलग बंदरगाह पर sshd का एक और उदाहरण चलाते हैं? क्या आपके पास कुछ भी असामान्य है .ssh/authorized_keysजैसे command=…? क्या आप सभी फ़ायरवॉल नियमों के माध्यम से देखने के लिए गए हैं कि क्या कोई गलती से कुछ एसएसएच पैकेटों को अवरुद्ध कर सकता है?
गिल्स एसओ- बुराई को रोकें '

1
क्या आप SSH कनेक्शन लटकाए हुए हैं और प्रॉम्प्ट पर जा सकते हैं? संकेत आपका सामान्य संकेत नहीं होगा। यदि यह समस्या है, तो आपको अपनी /etc/profile.d/*या /etc/bashrcफ़ाइलों में समस्या होने की संभावना है ।
slm

1
क्या "<Enter> ~?" कुछ भी करो? वह तीन कीप्स है, टिल्ड क्वेश्चनमार्क दर्ज करें।
गॉडलीजेक

1
जब आप लॉग इन कर सकते हैं, तो आपके डिफ़ॉल्ट शेल / etc / passwd में क्या है? यदि आप बैश शेल का उपयोग करके लॉग इन कर सकते हैं, तो ऐसा लगता है कि डिफ़ॉल्ट शेल बैश शेल के अलावा कुछ और है।
वार्विक

जवाबों:


5

यह प्रोफ़ाइल में एक समस्या से आ सकता है।
जब आप ssh -t /bin/bash अपने शेल से जुड़ेंगे तो 'लॉगिन' नहीं होगा, यह स्रोत नहीं होगा और /etc/profileन ही ...~/.profile~/.bashrc

इसलिए कनेक्ट करने के बाद, शेल को डिबग मोड में डालें, फिर प्रत्येक फ़ाइल को यह पता लगाने के लिए कि अंदर क्या अवरुद्ध है:

set -x 
. /etc/profile 
...and so on

संपादित करें

ध्यान दें कि मैं गलत था, .bashrc फ़ाइल को किसी भी इंटरेक्टिव शेल (इसलिए केवल प्रोफ़ाइल, प्रोफ़ाइल। फ़ाइल यहां मौजूद मामला) द्वारा सॉर्ट किया जाएगा।

कनेक्शन प्रक्रिया के विभिन्न चरणों की सूची बनाने का प्रयास करें। कुछ इस तरह

1) ssh कनेक्टिंग (config, ...)
2) लॉगिन (PAM, tty, wtmp, ...)
3) शेल शुरू करना (प्रोफ़ाइल, होम डायर एक्सेस, ...)

(1) की जाँच करने के लिए आप डिबग मोड में sshd डेमन शुरू कर सकते हैं। इसके लिए आपको एक और sshd शुरू करने की जरूरत है, एक समर्पित पोर्ट को सुनना (पोर्ट 22 पर नहीं ताकि नियमित sshd डेमॉन को रोकने की आवश्यकता न हो)।

# /usr/sbin/sshd -p 2222 -ddd 

वह sshd केवल एक कनेक्शन स्वीकार करेगा और पृष्ठभूमि में नहीं जाएगा। एक और टर्मिनल खोलें और उस ssh सत्र से कनेक्ट करें।

# ssh -vvv -p 2222 user@host

आप एक ही ब्रांड के दूसरे सर्वर के साथ मिलने वाले संदेशों की तुलना कर सकते हैं। तब आपको पता चल जाएगा कि समस्या ssh की तरफ है या नहीं।

(-dd और -vvv अधिकतम डिबग स्तर हैं, आप इसे ट्यून कर सकते हैं)

मुझे वह लिंक मिल गया , बहुत अधिक विस्तृत।


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

2

मेरी समस्या का जवाब यह एक नेटवर्किंग मुद्दा था। मुझे अंततः पता चला कि सभी नेटवर्क कार्ड के एमटीयू को थोड़ा नीचे छोड़ने से समस्या दूर हो गई।

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

हालांकि जागरूक रहें, यह एक अंतिम उपाय है । मेरे द्वारा की गई ख़ासियत यह थी कि ssh सर्वर ने एक ही सबनेट से काम किया था, लेकिन इसके बाहर नहीं, और ssh -t '/ bin / bash' ने कहीं से भी काम किया।

मेरे पास भी rsyncs थे जो ठीक शुरू हो जाएंगे, लेकिन कुछ बिंदु पर बस लटका, या कनेक्शन को छोड़ दें।

इसलिए यदि आप इस उत्तर को देख रहे हैं, तो पहले दूसरों से ऊपर की कोशिश करें, और केवल अगर आपको मेरी तरह विषमताएं मिलती हैं, तो क्या यह मदद करने की संभावना है।

तो सभी मदद के लिए धन्यवाद। मैंने सब कुछ करने की कोशिश की, और इसने मुझे भार सिखाया, और मुझे यह पुष्टि करने दिया कि सर्वर के साथ इसका कोई लेना-देना नहीं था (जो सब कुछ है जिसकी मुझे आशा थी)।

तो आप सभी को धन्यवाद जिन्होंने मदद की


1

जब आप ऐसा करेंगे ssh some_user@some_host /bin/bash, तो आप क्या कर रहे हैं लॉन्च कर रहा है some_user के खोल (के रूप में के रूप में परिभाषित /etc/passwdपर some_host ) और फिर दिया आदेश को क्रियान्वित करने, /bin/bash, कि खोल के भीतर से।

अब, some_user का शेल (मान लें कि यह भी है bash) इंटरेक्टिवली लॉन्च नहीं किया जा रहा है (यह इसके बजाय दिए गए कमांड को निष्पादित कर रहा है)। तो यह एक pty (एक छद्म टर्मिनल ) आवंटित नहीं करता है और इसका मतलब यह है कि जारी किए गए आदेश का उपयोग करने के लिए कोई pty नहीं है इसलिए यह गैर-अंतःक्रियात्मक रूप से शुरू होता है।

उदाहरण में, अनुरोधित /bin/bashकमांड लॉन्च किया गया है लेकिन यह लटका हुआ प्रतीत होता है।

आप इसे sshवैसे भी एक पाई बनाने के लिए कहकर ठीक कर सकते हैं ताकि शेल और इसकी बाल प्रक्रियाओं के लिए एक उपलब्ध हो। ये क्या -tकरता है

    $ ssh -t some_user@some_host bash

आप इसे एक पाइट बनाने के लिए कमांड को मजबूर करके भी ठीक कर सकते हैं। इसके लिए bash, आप एक -iतर्क पास करके ऐसा करते हैं । निम्नलिखित कमांड-लाइन को भी काम करना चाहिए:

$ ssh some_user@some_host bash -i

ध्यान दें, हालांकि इस बाद के मामले में, शेल पहुंच नहीं सकता है /dev/ttyऔर इसके परिणामस्वरूप चेतावनी दी गई है:

bash: no job control in this shell

इसके कारण यहां बताए गए हैं । शेल में आप क्या करने की योजना पर निर्भर करते हुए यह समस्या हो सकती है या नहीं भी हो सकती है, लेकिन इसका उपयोग ssh -tकरना शायद बेहतर विकल्प है।

(ध्यान दें कि आप केवल bashकमांड के रूप में पास कर सकते हैं क्योंकि यह वैसे भी उपयोगकर्ता के डिफ़ॉल्ट शेल के पथ पर होना चाहिए)


1

मुझे एक ही समस्या है जब मैंने हाल ही में एक नेस्टेड वर्चुअलाइजेशन प्लेटफॉर्म का उपयोग किया था।

यह स्रोत या गंतव्य सर्वर पर 1500 से 1400 तक एमटीयू को कम करने के बाद काम करता है।

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