Lorsque vous suivez les instructions pour effectuer des sauvegardes rsync données ici: http://troy.jdmz.net/rsync/index.html
Je reçois le message d'erreur "Non concordance de version de protocole - votre shell est-il propre?"
J'ai lu quelque part que je devais couper les affichages d'invite (PS1 = "") et motd (.hushlogin) pour résoudre ce problème. C'est ce que j'ai fait, l'invite et la bannière de connexion (MOTD) n'apparaissent plus, mais l'erreur persiste quand je lance:
rsync -avvvz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" remoteuser@remotehost:/remote/dir /this/dir/
Le client ssh et le serveur sshd utilisent tous deux la version 2 du protocole.
Quel pourrait être le problème? Merci.
[EDIT] J'ai trouvé http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html qui indique qu'il est parfois nécessaire de "forcer v2 en utilisant le drapeau -2 pour ssh ou slogin
ssh -2 -i ~/.ssh/my_private_key remotemachine"
Il n’est pas clair que cela résout le problème car je pense que j’ai mis ce changement APRÈS que l’erreur ait changé, mais le fait est que l’erreur a évolué vers autre chose. Je mettrai à jour cela quand j'apprendrai Et je vais certainement essayer la suggestion d’exécuter ceci dans un shell emacs - merci.
ESC x shell
et à faireexport TERM=xterm; ssh remotehost ls
. Si des caractères de contrôle ou des sorties parasites apparaissent, c’est ce que vous devez rechercher.--rsync-path
) ne change rien pour moi.Réponses:
Un de vos scripts de connexion (.bashrc / .cshrc / etc.) Envoie probablement des données au terminal (alors que ce ne devrait pas être le cas). Cela provoque une erreur de ssh lorsqu’il se connecte et s’apprête à copier dès qu’il commence à recevoir des données supplémentaires inattendues. Supprimez la sortie générée dans les scripts de démarrage.
Vous pouvez vérifier si votre terminal est interactif et n’afficher que du texte en utilisant le code suivant dans un bashrc. Quelque chose d'équivalent existe aussi pour d'autres coquilles:
ou alternativement, comme ceci, puisque le paramètre spécial
-
contienti
lorsque le shell est interactif:Pour plus d'informations, voir: rsync via ssh de Linux à Windows sbs 2003 incompatibilité de protocole
Pour diagnostiquer cela, assurez-vous que ce qui suit est la sortie que vous obtenez lorsque vous vous connectez à l'hôte:
Si vous obtenez des nouvelles lignes ou d’autres données, vous savez que des sorties supplémentaires sont envoyées. Vous pouvez renommer votre .bashrc / .cshrc / .profile / etc. fichiers vers quelque chose d'autre afin qu'ils ne produisent pas de sortie supplémentaire. Bien sûr, il existe encore des fichiers système qui pourraient causer cela. Dans ce cas, vérifiez auprès de votre administrateur système que les fichiers système ne génèrent pas de données.
la source
echo
dans le~/.bashrc
, Thx. Vous avez fait ma journéeIl existe un moyen simple de tester si votre shell est propre, pour une connexion SSH: exécutez une commande à partir de la connexion SSH, plutôt que de démarrer un shell interactif. La
false
commande se terminera immédiatement sans produire de sortie, donc c'est un bon test:Si cette ligne de commande produit une sortie, l’un de vos scripts de démarrage est à blâmer:
Une autre chose à vérifier si vous obtenez cette erreur est de savoir si rsync est installé et localisable par ssh:
Si rsync n'est pas dans le chemin, vous verrez quelque chose comme:
Vous pouvez résoudre ce problème en installant rsync ou, s'il est installé à un emplacement inhabituel, en transmettant l'emplacement à la ligne de commande rsync:
la source
Cela est généralement causé par les informations de connexion de votre shell qui en sortent sur un shell non interactif. Vous pouvez tester si c'est le cas en faisant:
Si testfile n’est PAS 0 octets, le problème est que votre shell émet quelque chose. Vérifiez
/etc/profile
,.profile
,.bashrc
,.cshrc
, etc. Dans ce cas, vous pouvez le changer pour vérifier si votre terminal est texte interactif et que la sortie en utilisant le code suivant dans un bashrc. Quelque chose d'équivalent existe aussi pour d'autres coquilles:ou alternativement, comme ceci, puisque le paramètre spécial
-
contienti
lorsque le shell est interactif:Toutefois, si le fichier de test contient en fait 0 octets, votre shell se comporte correctement, mais il est possible que vous disposiez d’une version très ancienne de rsync. Vous pouvez indiquer à la fin du client (en supposant qu'il s'agisse de la plus récente) de ne pas publier de version aussi élevée que l'ancienne version du serveur rysnc ne la reconnaît pas. Vous pouvez le faire en utilisant l'
--protocol=
option. Dans mon cas, l'utilisation a--protocol=30
fait l'affaire.Si le problème persiste, essayez ssh dans la connexion de l'utilisateur avec lequel rsysnc est connecté et essayez
rsync --version
de vérifier si le shell peut trouver rsync. Si quelque chose indique une commande introuvable, il est possible que rsync ne soit pas installé sur la machine à laquelle vous vous connectez ou qu'il ne soit pas dans le chemin. Rsync a des options pour spécifier le chemin de l'extrémité distante, lisez les pages de manuel.la source
--protocol
qui a résolu mon problème avec un serveur 2.5.6 (version 26 du protocole) et un client 3.1.0 (version 31 du protocole)C’est un cas spécial parmi les autres réponses, mais n’est pas très différent d’alors.
Pour exécuter un rsync via ssh, vous devez disposer d'un accès shell à ssh pour exécuter la commande rsync à distance. Si votre compte ssh n'autorise que scp / sftp, vous ne pourrez pas lancer la suppression de rsync et échouerez en donnant cette erreur.
Ceci peut être testé avec la même commande que ci-dessus
Celui-ci devrait échouer et celui-ci devrait être un succès
Cela prouve que vous n’avez qu’un accès sftp.
Si vous le souhaitez et que vous disposez des autorisations nécessaires, vous pouvez désactiver l'accès sftp uniquement pour cet utilisateur en modifiant les options
/etc/ssh/sshd_config
et en vérifiant les entréesmatch
etforcecommand
.Vous pouvez également consulter ce post
la source
J'ai eu
protocol version mismatch -- is your shell clean?
tout simplement parce que je n'avais pas encore installé rsync à l' autre bout.sudo yum install rsync
résolu le problème.la source
L'invite n'apparaîtra pas du tout lors de l'exécution directe d'une commande, et de manière non interactive. Le premier résultat est un simple google: http://marc.info/?l=rsync&m=100263876212594&w=2 Et comme le shell peut potentiellement être appelé, il ne doit rien afficher en mode non interactif - comme lorsque vous tapez simplement " bash "dans une invite existante, seule la nouvelle invite doit apparaître.
la source
Cela peut être dû à un message de connexion sur l'hôte distant tel que "Votre mot de passe va expirer dans 6 jours", ce que RSYNC n'attend pas.
la source