sftp एक त्रुटि देता है: "प्राप्त संदेश बहुत लंबा है" और इसका कारण क्या है?


26

मैं sftpकल एक आरएचईएल 5.4 बॉक्स (रेडहैट) करने में सक्षम था और आज मैं नहीं कर सकता।

संदेश है "Received message too long 778199411", और कुछ जांच के बाद, यह मेरे आरएचईएल बॉक्स की .bashrcएक लाइन होने के कारण था echo "running .bashrc"- या बिल्कुल भी कुछ भी गूंज रहा था, मुझे लगता है।

तो एक लाइन का मुद्रण क्यों प्रभावित करेगा sftp? यह एक डिजाइन मुद्दे की तरह कुछ महसूस किया .bashrcजैसे कि लॉग इन में अन्य स्थितियों में काम करता है में एक लाइन प्रिंट करना या ऐसा अजीब कारण के लिए विफल होने पर sshनीचे ट्रैक करना कठिन है sftp

तो सवाल यह है कि एक लाइन को प्रिंट करने से ऐसी त्रुटि क्यों होती है और क्या होगा अगर हम अभी भी किसी चीज का प्रिंट आउट लेना चाहते हैं .bashrc? (मुख्य रूप से यह देखने के लिए कि कब यह फाइल खट्टी / निष्पादित हो जाती है)।


जवाबों:


26

यह एक दीर्घकालिक समस्या है। मुझे यह दस साल पहले मिला था जब मुझे पहली बार काम पर एसएसएच और घर पर खुले एसएसएच का मिश्रण करना पड़ा था। मैं आज फिर से इसमें भाग गया और इस पोस्ट को पाया।

अगर मैंने "sftp / scp विफल रहता है, लेकिन ssh ठीक है" के लिए खोज की थी, तो मुझे जल्द ही समाधान याद दिलाया गया होगा!

सीधे शब्दों में कहें, .bashrc और .bash_profile आदि को चुप रहना पड़ता है या वे sftp / स्केच कनेक्शन प्रोटोकॉल में हस्तक्षेप करते हैं।

ओपन-एसएसएच FAQ देखें:

2.9 - sftp / scp कनेक्शन में विफल रहता है, लेकिन ssh ठीक है।


इस समस्या के लिए स्व-अद्यतन शेल उपयोगिताओं एक अच्छा अपराधी हैं। मेरे लिए यह अक्सर रूबी संस्करण प्रबंधक रहा है जो जेनकिंस की तैनाती-ओवर-एसएस के साथ हस्तक्षेप कर रहा है।
एरिक पी।

इसके लिए धन्यवाद, मेरे bashrc में कुछ डिबगिंग इको स्टेटमेंट्स को हटाकर bash_profile ने मेरे लिए इसे हल किया।
SgtPooki

3
गलत .bashrc को चुप रहना होगा, .bash_profile बिना किसी समस्या के गूंज सकता है।
kubanczyk

2
यहां किसी के भी उतरने के लिए: जैसा कि serverfault.com/a/630714 में सुझाया गया है , आप ssh yourhost /usr/bin/trueअपने ssh के आउटपुट की जांच करने के लिए उपयोग कर सकते हैं । मेरे मामले में, मुझे ~ / .bashrc में कुछ कमांड मिलीं जिससे त्रुटियों का उत्पादन शुरू हो गया।
युवल एट्ज़मन

16

कम से कम एसएफटीपी के लिए यह internal-sftpसबसिस्टम का उपयोग करके तय किया जा सकता है , क्योंकि यह नहीं पढ़ता है .bashrcया /etc/motd

बस /etc/ssh/sshd_configफ़ाइल बदलें और SFTP सबसिस्टम बदलें:

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

और त्रुटि हो गई है।


मुझे यह पसंद है .. बस आश्चर्य है कि क्या इसका कोई सुरक्षा निहितार्थ है?
18

internal-sftpIMO, SFTP सपोर्ट देने का एक बेहतर तरीका है। आप इस संबंधित पोस्ट को देख सकते हैं: serverfault.com/questions/660160/…
केनेथ

आपके sshd_config परिवर्तन सुझाव के बाद, मैंने sshd और sftp को मार डाला (यदि कोई दानव था तो निश्चित नहीं)। पहली बार प्राप्त संदेश को बहुत लंबी त्रुटि मिली, लेकिन वैसे भी लॉग इन किया गया था। फिर उसी समस्या पर वापस
स्पष्ट करें

2

हर प्रतिक्रिया जो मैंने कहीं भी देखी है यह सब दावा है कि यह बहुत अधिक मुद्रित आउटपुट है /etc/motd, या .bashrc, आदि। हमेशा सच नहीं है। यदि आप एक खाता है कि कोई है, तो .bashrc, /etc/motdखाली है, और डिफ़ॉल्ट .bashrcहै कम से कम कोई मुद्रित आउटपुट आप अभी भी समस्या हो सकता है के साथ। यदि आपके पास एक शेल वाला उपयोगकर्ता खाता है /sbin/nologinया /bin/falseयह त्रुटि अभी भी होगी।

आप ऐसा क्यों करेंगे??? यदि आप किसी को रूट-जेल देने की कोशिश कर रहे हैं sftp, तो कोई सुरक्षित-शेल एक्सेस नहीं होगा।

आसपास काम करें: अनुमति दें sshऔर उन्हें रूट जेल में भी डालें। यह एक ऐसी समस्या है जिस पर ध्यान देने की आवश्यकता है ssh, यह आने में बहुत लंबा है।


मेरे .bashrc में बहुत लंबे कस्टम आउटपुट के कारण मुझे यह समस्या हुई (मेरे पास वहां स्क्रीनफैच है)। लेकिन मैं अभी भी यह पता लगाने की कोशिश कर रहा हूं कि इसे कैसे अनदेखा करना है
vladkras

हाँ, यह मामला हो सकता है। आपको ssh को संशोधित करना होगा। हमारे मामले में यह शेल के साथ एक समस्या थी। हमने वास्तव में विशेष रूप से रूट-जेल के लिए एक sftp क्लाइंट का उपयोग किया है ताकि सभी रूट-जेल सामान को न करना पड़े।
TekOps

मुद्दा यह है कि मैं अपने .bashrc को संशोधित नहीं करना चाहता। मैं पहले संदेश की किसी भी लंबाई के साथ सर्वर से जुड़ना चाहता हूं। इसलिए मुझे अपने आईडीई की सेटिंग्स को संशोधित करना होगा
vladkras 13

2

बस के शीर्ष में निम्नलिखित डाल / / .bashrc आईडी के उपयोगकर्ता नाम पर रिमोट मशीन पर अगर वह आईडी बैश का उपयोग करता है

# If not running interactively, don't do anything and return early
[[ $- == *i* ]] || return  

जो पूरी फ़ाइल को सोर्स करने के बजाय ~ / .bashrc से जल्दी बाहर निकलता है ... यह बनाता है .bashrc चुप जब आप उस आईडी में लॉग इन नहीं कर रहे हैं और सिर्फ रिमोट आईडी के रूप में उस उपयोगकर्ता नाम के साथ अपना scp या sftp चला रहे हैं ... अन्य उत्तर में @Peter स्कॉट को उद्धृत करने के लिए: "बस रखो, .Bashrc और .bash_profile आदि को चुप रहना होगा या वे sftp / scp कनेक्शन प्रोटोकॉल में हस्तक्षेप करते हैं।"

वैकल्पिक रूप से, यदि वह रिमोट आईडी zsh का उपयोग करता है तो उसके ~ / .zshrc के शीर्ष पर रखें

# If not running interactively, don't do anything and return early
[[ -o interactive ]] || exit 0

यदि आपकी रिमोट मशीन पर शेल ~ / .bashrc का उपयोग नहीं करता है, तो ऊपर फ़ाइल में संपादित करें ~ / .bashrc_profile या ~ / .profile या उस दूरस्थ बॉक्स पर आपके शेल के अनुरूप होने के लिए।


1

इसकी एक और वजह हो सकती है। आरओईएल 6 पर ओपनश-5.3p1-122.el6.x86_64 के साथ हमने पाया है कि जब LOCALE "C" पर रहता है तो यह गलत व्यवहार करता है। जब इसके साथ बदला गया:

export LC_ALL="en_US.UTF-8"

फिर sftp सही तरीके से बर्ताव करता है। पिछले Opensh-5.3p1-118 में हमने इस तरह के व्यवहार का अनुभव नहीं किया है, इसलिए यह इस निर्माण में कुछ मामूली बग है।


1
यह अजीब सा सुझाव था कि मेरी स्थिति के लिए क्या काम किया गया था। धन्यवाद!
jwd630

0

मेरे मामले में, इसे काम करने के लिए, मुझे उबंटू के स्वागत संदेश को अक्षम करने की आवश्यकता थी।

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