प्रोटोकॉल संस्करण बेमेल - क्या आपका शेल साफ है?


55

जब यहाँ दिए गए rsync बैकअप करने के निर्देशों का पालन करें: http://troy.jdmz.net/rsync/index.html

मुझे त्रुटि "प्रोटोकॉल संस्करण बेमेल है - क्या आपका शेल साफ है?"

मैंने कहीं पढ़ा कि मुझे इससे निपटने के लिए संकेत (PS1 = "") और motd (.hushlogin) प्रदर्शित करने की आवश्यकता है। मैंने ऐसा किया है, शीघ्र और लॉगिन बैनर (MOTD) अब दिखाई नहीं देता है, लेकिन त्रुटि तब भी दिखाई देती है जब मैं चलता हूं:

rsync -avvvz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" remoteuser@remotehost:/remote/dir /this/dir/

Ssh क्लाइंट और sshd सर्वर दोनों प्रोटोकॉल के संस्करण 2 का उपयोग कर रहे हैं।

क्या समस्या हो सकती है? धन्यवाद।

[संपादित करें] मैंने http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html पाया है जो यह निर्देश देता है कि कभी-कभी "फोर्स v2" को -2 फ्लैग का उपयोग करके या स्लगिन के लिए आवश्यक होता है।

 ssh -2 -i ~/.ssh/my_private_key remotemachine"

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


1
क्या आपकी लॉगिन स्क्रिप्ट आउटपुट कुछ ऐसा है जो तुरंत दिखाई नहीं देता है, उदाहरण के लिए एक विंडो शीर्षक बदलना कमांड? इसे जांचने का एक तरीका Emacs चलाना, टाइप ESC x shellकरना और करना है export TERM=xterm; ssh remotehost ls। यदि कोई नियंत्रण वर्ण या अन्य सहज आउटपुट दिखाई देता है, तो आपको वही शिकार करना होगा।
गाइल्स 'एसओ- बुराई को रोकना'

1
मुझे भी यही समस्या आ रही थी। मेरे मामले में SSH सर्वर को उपयोगकर्ताओं को हटाने के लिए कॉन्फ़िगर किया गया था और केवल SFTP का उपयोग करने की अनुमति दी गई थी ताकि दूरस्थ शेल से rsync कमांड को चलाना संभव न हो। यदि आपके पास / etc / ssh / sshd_config में ForceCommand कॉन्फ़िगरेशन विकल्प के लिए सर्वर चेक तक पहुँच है। यदि यह किसी ऐसी समस्या के लिए सेट है।
डेविस

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

@sheldonh: क्या आपके मामले में स्थानीय और दूरस्थ मशीन का मार्ग भिन्न है? मेरे मामले में वे वैसे भी वही हैं और दे रहे हैं या नहीं दे रहे हैं ( --rsync-path) मेरे लिए कोई चीज नहीं बदलती है।
0xC0000022L

1
@ 0xC0000022L क्षमा करें, मुझे याद नहीं है।
शेल्डन

जवाबों:


62

आपकी लॉगिन स्क्रिप्ट्स में से एक (.bashrc / .cshrc / etc।) संभवतः टर्मिनल पर डेटा आउटपुट कर रही है (जब यह नहीं होना चाहिए)। जब यह कनेक्ट हो रहा है और इसे कॉपी करने के लिए तैयार हो रहा है, तो यह त्रुटि के कारण ssh हो रहा है क्योंकि यह अतिरिक्त डेटा प्राप्त करना शुरू कर देता है जिसकी उसे उम्मीद नहीं है। स्टार्टअप स्क्रिप्ट में उत्पन्न आउटपुट को हटा दें।

आप जांच सकते हैं कि क्या आपका टर्मिनल एक bashrc में निम्न कोड का उपयोग करके इंटरैक्टिव और केवल आउटपुट टेक्स्ट है। कुछ समान अन्य शेल के लिए भी मौजूद है:

if shopt -q login_shell; then
    [any code that outputs text here]
fi

या वैकल्पिक रूप से, इस तरह, चूंकि विशेष पैरामीटर -में iशेल के संवादात्मक होने पर शामिल होता है:

if echo "$-" | grep i > /dev/null; then
    [any code that outputs text here]
fi

अधिक जानकारी के लिए देखें: लिनक्स से विंडोज़ के लिए ss के माध्यम से rsync 2003 प्रोटोकॉल मिसमैच

इसका निदान करने के लिए, सुनिश्चित करें कि जब आप मेजबान के लिए ssh करते हैं तो निम्नलिखित आउटपुट मिलते हैं:

USER@HOSTNAME's password: 
Last login: Mon Nov  7 22:54:30 2011 from YOURIP
[USER@HOSTNAME ~]$ 

यदि आपको कोई नया लिंक या अन्य डेटा मिलता है, तो आप जानते हैं कि अतिरिक्त आउटपुट भेजा जा रहा है। आप अपना .bashrc / .cshrc / .profile / etc नाम बदल सकते हैं। फ़ाइलों को कुछ और ताकि वे अतिरिक्त आउटपुट नहीं देंगे। बेशक अभी भी सिस्टम फाइलें हैं जो इसका कारण बन सकती हैं। उस स्थिति में, अपने sysadmin के साथ जांचें कि सिस्टम फ़ाइलें डेटा आउटपुट नहीं करती हैं।


5
एक echoमें ~/.bashrc, Thx। आपने मेरा दिन बना दिया
user9869932

19

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

bash$ ssh remotehost false
Enter passphrase for key '/home/user/.ssh/my_private_key': 
bash$

यदि वह कमांड लाइन किसी भी आउटपुट का उत्पादन करती है, तो आपकी एक स्टार्टअप स्क्रिप्ट को दोष देना है:

bash$ ssh remotehost false
Enter passphrase for key '/home/user/.ssh/my_private_key': 
Welcome to RemoteHost!

This system is company property and is provided for authorized use only, 
as set forth in applicable written policies. Unauthorized use is prohibited 
and may be subject to discipline, civil suit and criminal prosecution.

Welcome back - You last logged in 16 days ago...
bash$

यह जाँचने के लिए कि क्या आपको यह त्रुटि मिल रही है, क्या rsync स्थापित है और ssh द्वारा नियंत्रण योग्य है:

bash$ ssh remotehost "rsync --version"
Enter passphrase for key '/home/user/.ssh/my_private_key': 
rsync  version 3.0.9  protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.
bash$

यदि rsync रास्ते में नहीं है, तो आपको इसके बजाय कुछ दिखाई देगा:

bash$ ssh remotehost "rsync --version"
Enter passphrase for key '/home/user/.ssh/my_private_key': 
bash: rsync: command not found
bash$

आप इसे या तो rsync स्थापित करके ठीक कर सकते हैं, या यदि यह स्थापित है, लेकिन किसी असामान्य स्थान पर है, तो rsync आदेश को स्थान दे रहा है:

rsync -avvvz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" \
    --rsync-path="/usr/local/bin/rsync" \
    remoteuser@remotehost:/remote/dir /this/dir/

7

यह आमतौर पर आपके शेल के लॉगिन सामान के सामान के कारण होता है जो एक गैर-इंटरैक्टिव शेल पर सामान होता है। यदि आप ऐसा कर सकते हैं, तो आप परीक्षण कर सकते हैं:

ssh username@host "/bin/true" > testfile
ls -l testfile

यदि टेस्टफाइल 0 बाइट्स नहीं है, तो परेशानी यह है कि आपका शेल कुछ आउटपुट कर रहा है। चेक /etc/profile, .profile, .bashrc, .cshrc, आदि अगर ऐसा है, आप अगर अपने टर्मिनल इंटरैक्टिव और केवल उत्पादन पाठ एक bashrc में निम्न कोड का उपयोग करना है की जाँच करने के लिए इसे बदल सकते हैं। कुछ समान अन्य शेल के लिए भी मौजूद हैं:

if shopt -q login_shell; then
    [any code that outputs text here]
fi

या वैकल्पिक रूप से, इस तरह, चूंकि विशेष पैरामीटर -में iशेल के संवादात्मक होने पर शामिल होता है:

if echo "$-" | grep i > /dev/null; then
    [any code that outputs text here]
fi

हालांकि, यदि परीक्षण फ़ाइल वास्तव में 0 बाइट्स में है, तो आपका शेल व्यवहार कर रहा है, लेकिन यह संभव है कि आपके पास rsync का बहुत पुराना संस्करण हो। आप क्लाइंट एंड को बता सकते हैं (यह नया अंत है) कि इतने उच्च संस्करण का विज्ञापन न करने के लिए पुराने rysnc सर्वर संस्करण इसे नहीं पहचानता है। आप --protocol=विकल्प का उपयोग करके ऐसा कर सकते हैं । मेरे मामले में, --protocol=30चाल का उपयोग किया।

यदि आपको अभी भी परेशानी हो रही है, तो ssh कोशिश करें क्योंकि उपयोगकर्ता rsysnc के साथ जुड़ रहा है rsync --versionऔर यह देखने के लिए चल रहा है कि क्या शेल rsync ढूंढ सकता है। यदि आपको ऐसा कुछ मिलता है जो कहता है कि कमांड नहीं मिला है, तो rsync उस मशीन पर स्थापित नहीं हो सकता है जिसे आप कनेक्ट कर रहे हैं या यह पथ में नहीं हो सकता है। Rsync में दूरस्थ छोर के पथ को निर्दिष्ट करने के लिए विकल्प हैं, मैन पेज पढ़ें।


हिंट के लिए +1 --protocolजिसके बारे में 2.5.6 सर्वर (प्रोटोकॉल संस्करण 26) और 3.1.0 क्लाइंट (प्रोटोकॉल संस्करण 31) के साथ मेरी समस्या हल हुई
मैटबियानको

4

यह अन्य उत्तरों से एक विशेष मामला है, लेकिन तब से बहुत अलग नहीं है।

Ss के माध्यम से rsync निष्पादित करने के लिए, आपको दूरस्थ rsync कमांड को निष्पादित करने के लिए ssh में शेल एक्सेस की आवश्यकता होती है। यदि आपका ssh खाता केवल scp / sftp की अनुमति देता है, तो आप rsync को प्रारंभ नहीं कर पाएंगे और यह त्रुटि देने में विफल रहेंगे।

यह ऊपर के समान कमांड के साथ परीक्षण किया जा सकता है

ssh remotehost false

यह असफल होना चाहिए और यह एक सफलता होनी चाहिए

sftp remotehost

यह साबित करता है कि आपके पास केवल एक sftp है।

यदि आप चाहते हैं और ऐसा करने की अनुमति है, तो आप उस उपयोगकर्ता के लिए केवल sftp एक्सेस को अक्षम कर सकते हैं, संपादन करके और प्रविष्टियों के /etc/ssh/sshd_configलिए जाँच कर सकते हैं।matchforcecommand

आप इस पोस्ट को भी देख सकते हैं


4

मुझे protocol version mismatch -- is your shell clean?बस इसलिए मिला क्योंकि मैंने दूसरे छोर पर rsync स्थापित नहीं किया था । sudo yum install rsyncसमस्या का हल किया।


एक कंटेनर के साथ खिलवाड़ करते हुए 30 मिनट बिताए और अंसिबल सोच रहा था कि rsync काम क्यों नहीं कर रहा है ... जब इसे स्थापित नहीं किया जाता है तो इसके लिए मुश्किल है! धन्यवाद;)
रयान फिशर

2

प्रॉम्प्ट सीधे कमांड को निष्पादित करते समय नहीं दिखाया जाएगा, और गैर-अंतःक्रियात्मक रूप से। एक साधारण Google पहला परिणाम देता है: http://marc.info/?l=rsync&m=100263876212594&w=2 और चूंकि शेल को संभावित रूप से आमंत्रित किया जा सकता है, इसलिए इसे गैर-संवादात्मक मोड में कुछ भी प्रदर्शित नहीं करना चाहिए - जैसे, बस टाइप करते समय " मौजूदा प्रॉम्प्ट में बैश करें, लेकिन नया प्रॉम्प्ट कुछ भी नहीं दिखाई देना चाहिए।


शायद मैंने इसे पर्याप्त रूप से स्पष्ट नहीं किया था, लेकिन मैंने पहले ही यह "शीघ्र (PS1 =" ") और motd (.hushlogin) कर दिया है। लॉगिन वास्तव में कोई संकेत नहीं दिखाता है। इसके बावजूद प्रोटोकॉल बेमेल त्रुटि अभी भी दिखाई देती है। धन्यवाद हालांकि - सुझाव की बहुत सराहना करते हैं।
rfreytag

आपने मूल रूप से पहले से ही इसका उल्लेख किया है, लेकिन मुझे इस तरह की समस्याएं हैं अगर वहाँ .bashrc (या अन्य प्रोफ़ाइल स्क्रिप्ट) में कुछ भी है जो स्क्रीन के लिए कुछ भी करता है। मुझे शेल में कुछ प्रोग्राम चलाने पर भी इस तरह की समस्या हुई है जो चीजों को एक निश्चित तरीके से बदलता है (उदाहरण के लिए, मैं अपने शेल को chsh के साथ बदलने में सक्षम नहीं था, इसलिए मेरे पास मेरे .cshrc रन बैश को बदलने के लिए था। शेल, और ssh अब काम नहीं करेगा)।
lsd

खैर यह निश्चित रूप से दिलचस्प है। मुझे आश्चर्य है कि मैं rsync कमांड निष्पादित करने के बाद से इसका निदान कैसे कर सकता हूं? हम्म ... मुझे आश्चर्य है कि अगर आप सुझाव के साथ शेल के साथ कुछ एमिस हैं। धन्यवाद।
rfreytag

1

यह दूरस्थ होस्ट पर लॉगिन संदेश के कारण हो सकता है जैसे कि "आपका पासवर्ड 6 दिनों में समाप्त होने जा रहा है" जो कि RSY2 उम्मीद नहीं करता है

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