सवाल प्रोटोकॉल संस्करण विसंगति - क्या आपका खोल साफ है?


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

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

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

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

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

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

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

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

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


49
2018-05-06 21:15


मूल


क्या आपकी लॉगिन स्क्रिप्ट्स कुछ ऐसा आउटपुट करता है जो तुरंत दिखाई नहीं दे रहा है, उदाहरण के लिए एक विंडो शीर्षक बदलते कमांड? इसे जांचने का एक तरीका Emacs को चलाने के लिए है, टाइप करें ESC x shell, और करो export TERM=xterm; ssh remotehost ls। यदि कोई नियंत्रण वर्ण या अन्य नकली आउटपुट दिखाई देता है, तो यही आपको शिकार करना है। - Gilles
मुझे भी यही समस्या आ रही थी। मेरे मामले में एसएसएच सर्वर उपयोगकर्ताओं को छेड़छाड़ करने के लिए कॉन्फ़िगर किया गया था और केवल एसएफटीपी एक्सेस की अनुमति देने के लिए, दूरस्थ रिमोट से rsync कमांड चलाने के लिए संभव नहीं था। यदि आपके पास सर्वर के पास / etc / ssh / sshd_config में ForceCommand कॉन्फ़िगरेशन विकल्प की जांच है। अगर यह किसी समस्या पर सेट है जो समस्या है। - devius
रिकॉर्ड के लिए, मैंने एक ऐसी स्थिति में भाग लिया है जहां मैंने अभी प्रोटोकॉल विसंगति को छोड़ दिया है। rsync --version आउटपुट दोनों मेजबान, इंटरैक्टिव और गैर-इंटरैक्टिव एसएसएच पर पूरी तरह से चुप, अधिकृत_की में कुछ भी फैंसी नहीं है ... बस काम नहीं करता है। मैं इस टिप्पणी को उन लोगों के लिए छोड़ देता हूं जो खरगोश होलिंग हैं। अपने आप को एक पक्ष करो और बिना --rsync-path के प्रयास करें। आपको शायद पता चलेगा कि आपकी समस्या से इस SO के साथ कुछ लेना देना नहीं है। - sheldonh
@sheldonh: स्थानीय और दूरस्थ मशीन पर पथ आपके मामले में भिन्न था? मेरे मामले में वे वही हैं और इसे देने या देने (--rsync-path) मेरे लिए एक चीज़ नहीं बदलता है। - 0xC0000022L
@ 0xC0000022L क्षमा करें, मुझे याद नहीं है। - sheldonh


जवाब:


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

आप जांच सकते हैं कि आपका टर्मिनल इंटरैक्टिव है और केवल 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

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

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

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

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


54
2017-11-07 08:31



एक echo में ~/.bashrc, धन्यवाद। आपने मेरा दिन बना दिया - xyz


एक एसएसएच कनेक्शन के लिए, यदि आपका खोल साफ़ है, तो परीक्षण करने का एक आसान तरीका है: एक इंटरैक्टिव खोल शुरू करने के बजाय, एसएसएच कनेक्शन से कमांड चलाएं। 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 द्वारा locatable है:

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/

15
2018-01-19 11:39





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

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

यदि 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 इंस्टॉल नहीं हो सकता है जिसे आप कनेक्ट कर रहे हैं या यह पथ में नहीं हो सकता है। रिमोट एंड के पास रिमोट एंड के पथ को निर्दिष्ट करने के विकल्प हैं, मैन पेज को पढ़ें।


6
2017-07-16 20:28



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


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

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

यह उपरोक्त के समान आदेश के साथ परीक्षण किया जा सकता है

ssh remotehost false

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

sftp remotehost

यह साबित करता है कि आपके पास केवल एक एसएफटीपी पहुंच है।

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

आप यह भी देख सकते हैं पद


4
2018-06-11 16:11





मुझे मिला protocol version mismatch -- is your shell clean? बस क्योंकि मैंने rsync को इंस्टॉल नहीं किया था अन्य अभी तक खत्म sudo yum install rsync समस्या का हल किया।


4
2017-09-16 10:33



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


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


2
2018-05-06 21:29



शायद मैंने इसे पर्याप्त रूप से स्पष्ट नहीं किया है लेकिन मैंने पहले ही यह "प्रॉम्प्ट (PS1 =" ") और motd (.hushlogin)" किया है। लॉगिन वास्तव में कोई संकेत नहीं दिखाता है। इसके बावजूद प्रोटोकॉल मेल नहीं खाता अभी भी प्रकट होता है। धन्यवाद हालांकि - सुझाव की बहुत सराहना करते हैं। - rfreytag
आपने मूल रूप से इसका पहले ही उल्लेख किया है, लेकिन अगर मुझे .bashrc (या अन्य प्रोफ़ाइल स्क्रिप्ट) में कुछ भी है, तो मुझे इस तरह की समस्याएं आईं जो स्क्रीन पर कुछ भी गूंजती हैं। शैल में कुछ प्रोग्राम चलाते समय भी मुझे इस तरह की समस्या होती है जो चीजों को एक निश्चित तरीके से बदलती है (उदाहरण के लिए, मैं अपने खोल को चेश के साथ बदलने में सक्षम नहीं था, इसलिए मेरे पास मेरे .cshrc रन बैश को बदलने के लिए था खोल, और एसएसएच अब और काम नहीं करेगा)। - lsd
वैसे यह निश्चित रूप से दिलचस्प है। मुझे आश्चर्य है कि मैं इसे कैसे निदान कर सकता हूं क्योंकि rsync कमांड निष्पादित करने से इंटरैक्टिव रूप से स्क्रीन पर प्रतिबिंबित कुछ भी नहीं दिखाता है और लॉगिन पूरी तरह से चुप है? हमम ... मुझे आश्चर्य है कि शेल के साथ कुछ अस्वस्थ है जैसा आप सुझाव देते हैं। धन्यवाद। - rfreytag


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


1
2018-04-30 23:28