Vraag protocolversie komt niet overeen - is uw shell schoon?


Volg de instructies om rsync-backups te doen die hier worden gegeven: http://troy.jdmz.net/rsync/index.html

Ik krijg de fout "protocol-versie komt niet overeen - is uw shell schoon?"

Ik heb ergens gelezen dat ik de prompt (PS1 = "") en motd (.hushlogin) -schermen moest dempen om hiermee om te gaan. Ik heb dit gedaan, de prompt en login banner (MOTD) verschijnen niet meer, maar de foutmelding blijft verschijnen als ik het volgende draai:

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

Zowel ssh-client als sshd-server gebruiken versie 2 van het protocol.

Wat kan het probleem zijn? Bedankt.

[BEWERK] ik heb gevonden http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html die aangeeft dat het soms nodig is om "Force2 te forceren door de vlag -2 te gebruiken voor ssh of slogin

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

Het is niet duidelijk dat dit het probleem heeft opgelost, omdat ik denk dat ik deze verandering heb aangebracht nadat de fout is gewijzigd, maar het feit is dat de fout is geëvolueerd naar iets anders. Ik zal dit updaten wanneer ik meer leer. En ik zal zeker de suggestie proberen om dit uit te voeren in een emacs-schaal - dank je.


49
2018-05-06 21:15


oorsprong


Verstrekken uw inlogscripts iets dat niet meteen zichtbaar is, bijvoorbeeld een opdracht voor het veranderen van een venstertitel? Een manier om dit te controleren, is om Emacs uit te voeren, typ ESC x shell, en doe export TERM=xterm; ssh remotehost ls. Als er controletekens of andere onechte uitvoer verschijnen, moet je dat opzoeken. - Gilles
Ik had hetzelfde probleem. In mijn geval was de SSH-server geconfigureerd om gebruikers te chroot en om alleen SFTP-toegang toe te staan, zodat het niet mogelijk was om de rsync-opdracht vanuit de externe shell uit te voeren. Als u toegang hebt tot de server, controleert u de ForceCommand-configuratieoptie in / etc / ssh / sshd_config. Als het is ingesteld op iets dat het probleem is. - devius
Voor de goede orde, ik ben een situatie tegengekomen waarbij ik het gewoon opgaf met een protocol-mismatch. rsync --versie uitvoer identiek op beide hosts, interactief en niet-interactief ssh volledig stil, niets speciaals in authorized_keys ... Werkt gewoon niet. Ik laat deze reactie achter voor anderen die een rabbt hebben. Doe jezelf een plezier en probeer zonder --rsync-pad. U zult waarschijnlijk merken dat uw probleem niets te maken heeft met deze SO. - sheldonh
@sheldonh: verschilt het pad op de lokale en externe machine in uw geval? in mijn geval zijn ze hoe dan ook dezelfde en geven of geven ze niet (--rsync-path) heeft niets voor mij veranderd. - 0xC0000022L
@ 0xC0000022L Sorry, ik kan het me niet herinneren. - sheldonh


antwoorden:


Een van uw inlogscripts (.bashrc / .cshrc / etc.) Voert waarschijnlijk gegevens uit naar de terminal (wanneer dit niet het geval zou zijn). Dit veroorzaakt een SSH-fout bij het verbinden en klaar om te kopiëren, omdat het extra gegevens ontvangt die het niet verwacht. Uitvoer verwijderen die wordt gegenereerd in de opstartscripts.

U kunt controleren of uw terminal interactief is en alleen tekst uitvoeren door de volgende code in een bashrc te gebruiken. Iets equivalent bestaat ook voor andere shells:

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

of als alternatief, zoals dit, sinds de speciale parameter - bevat i wanneer de shell interactief is:

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

Zie voor meer informatie: rsync via ssh van linux naar windows sbs 2003 protocol mismatch

Om dit te diagnosticeren, zorg je ervoor dat het volgende de uitvoer is die je krijgt als je de host inschakelt:

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

Als u nieuwe regels of andere gegevens ontvangt, weet u dat er extra uitvoer wordt verzonden. U zou uw .bashrc / .cshrc / .profile / etc. Kunnen hernoemen. bestanden naar iets anders zodat ze geen extra uitvoer uitvoeren. Natuurlijk zijn er nog steeds systeembestanden die dit kunnen veroorzaken. Controleer in dat geval met uw systeembeheerder of de systeembestanden geen gegevens uitvoeren.


54
2017-11-07 08:31



Een echo in de ~/.bashrc, Dankje. Jij hebt mijn dag gemaakt - xyz


Er is een eenvoudige manier om te testen of je shell schoon is, voor een ssh-verbinding: voer een opdracht uit vanuit de ssh-verbinding in plaats van een interactieve shell te starten. De false commando zal onmiddellijk worden beëindigd zonder output te produceren, dus het is een goede test:

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

Als die opdrachtregel uitvoer produceert, is een van uw opstartscripts de schuldige:

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$

Een ander ding om te controleren of deze fout optreedt is of rsync is geïnstalleerd en lokaliseerbaar door 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$

Als rsync niet op het pad staat, ziet u in plaats daarvan iets als:

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

U kunt dit oplossen door rsync te installeren of, als het is geïnstalleerd maar op een ongebruikelijke locatie, de locatie door te geven aan de rsync-opdrachtregel:

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





Dit wordt meestal veroorzaakt door het inloggedoe van je shell om dingen uit te voeren op een niet-interactieve shell. U kunt testen of dit het geval is door te doen:

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

Als het testbestand NIET 0 bytes is, dan is het probleem dat uw shell iets uitvoert. Controleren /etc/profile, .profile, .bashrc, .cshrc, enzovoort. Als dit het geval is, kunt u dit wijzigen om te controleren of uw terminal interactief is en alleen tekst uitvoeren door de volgende code in een bashrc te gebruiken. Iets equivalent bestaat ook voor andere shells:

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

of als alternatief, zoals dit, sinds de speciale parameter - bevat i wanneer de shell interactief is:

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

Als het testbestand echter in feite 0 bytes is, gedraagt ​​uw shell zich, maar het is mogelijk dat u slechts een erg oude versie van rsync hebt. U kunt het einde van de client vertellen (ervan uitgaande dat dit het nieuwere einde is) om niet zo'n hoge versie te adverteren dat de oude rysnc-serverversie het niet herkent. U kunt dit doen met behulp van de --protocol= keuze. In mijn geval, gebruiken --protocol=30 deed het.

Als je nog steeds problemen ondervindt, probeer dan ssh in als de gebruiker rsysnc verbinding maakt met en probeer het uit te voeren rsync --version om te zien of de shell rsync kan vinden. Als u iets krijgt dat zegt dat het commando niet is gevonden, is rsync mogelijk niet geïnstalleerd op het apparaat waarmee u verbinding maakt of bevindt het zich mogelijk niet op het pad. Rsync heeft wel opties voor het specificeren van het pad van de remote end, lees de man-pagina ('s).


6
2017-07-16 20:28



+1 voor de hint over --protocol die mijn probleem heeft opgelost met een 2.5.6-server (protocolversie 26) en een 3.1.0-client (protocolversie 31) - MattBianco


Dit is een speciaal geval uit de andere antwoorden, maar het is niet veel anders dan toen.

Om een ​​rsync via ssh uit te voeren, heb je shell-toegang in ssh nodig om de remote rsync-opdracht uit te voeren. Als je SSH-account alleen scp / sftp toestaat, kun je het verwijderen van rsync niet starten en krijg je deze foutmelding niet.

Dit kan worden getest met hetzelfde commando als hierboven

ssh remotehost false

Deze zou moeten falen en deze zou succes moeten hebben

sftp remotehost

Dit bewijst dat je alleen een SFTP hebt.

Als je dit wilt en toestemming hebt om dit te doen, kun je de sftp-only-toegang voor die gebruiker uitschakelen door het te bewerken /etc/ssh/sshd_config en controleer voor match  en forcecommand inzendingen.

U kunt dit ook controleren post


4
2018-06-11 16:11





ik heb protocol version mismatch -- is your shell clean? gewoon omdat ik rsync niet had geïnstalleerd op de anders eindig nog sudo yum install rsync probleem opgelost.


4
2017-09-16 10:33



Ik heb 30 minuten geknoeid met een container en Ansible vroeg me af waarom rsync niet werkte ... moeilijk om te gebruiken wanneer het niet is geïnstalleerd! Bedankt ;) - Ryan Fisher


De prompt wordt helemaal niet getoond wanneer een opdracht direct wordt uitgevoerd, en niet-interactief dus. Een eenvoudige google verschijnt eerste resultaat: http://marc.info/?l=rsync&m=100263876212594&w=2 En aangezien de shell mogelijk kan worden opgeroepen, mag deze niets weergeven in de niet-interactieve modus - zoals wanneer u gewoon "bash" in een bestaande prompt typt, zou niets anders dan de nieuwe prompt moeten verschijnen.


2
2018-05-06 21:29



Misschien heb ik het niet voldoende duidelijk gemaakt, maar ik heb dit al gedaan "prompt (PS1 =" ") en motd (.hushlogin)". De login toont inderdaad geen prompt. Desondanks verschijnt de protocolmismatch-fout nog steeds. Bedankt echter - waardeer de suggestie. - rfreytag
Je hebt dit eigenlijk al genoemd, maar ik heb problemen als deze gehad als er iets in het .bashrc (of ander profielscript) is dat iets op het scherm echoot. Ik heb zelfs dit soort problemen gehad bij het uitvoeren van bepaalde programma's in de shell die de dingen op een bepaalde manier veranderen (ik kon bijvoorbeeld mijn shell niet veranderen met chsh, dus ik had mijn .cshrc run bash om mijn shell en ssh zou niet meer werken). - lsd
Nou dat is zeker interessant. Ik vraag me af hoe ik dit kan diagnosticeren, omdat het uitvoeren van het rsync-commando interactief niets op het scherm weergeeft en de login volledig stil is? Hmmm ... Ik vraag me af of er iets mis is met de schaal zoals je suggereert. Bedankt. - rfreytag


Dit kan worden veroorzaakt door een inlogbericht op de externe host, zoals "Uw wachtwoord verloopt over 6 dagen", wat RSYNC niet verwacht


1
2018-04-30 23:28