Rsync over ssh fonctionne bien à chaque fois.
Cependant, essayer de rsync sur un hôte qui n'autorise que les connexions sftp, mais pas les connexions ssh, génère l'erreur suivante:
rsync -av / source utilisateur ssh @ remotehost: / target /
Non correspondance de version de protocole - votre shell est-il propre? (voir la page de manuel rsync pour une explication) Erreur rsync: incompatibilité de protocole (code 2) dans compat.c (171) [expéditeur = 3.0.6]
Voici la section pertinente de la page de manuel rsync:
Ce message est généralement dû au fait que vos scripts de démarrage ou vos installations de shell à distance génèrent des déchets indésirables sur le flux utilisé par rsync pour son transport. La façon de diagnostiquer ce problème consiste à exécuter votre shell distant comme suit:
ssh remotehost /bin/true > out.dat
puis regardez out.dat. Si tout fonctionne correctement, out.dat devrait être un fichier de longueur zéro. Si vous obtenez l'erreur ci-dessus de la part de rsync, vous constaterez probablement que out.dat contient du texte ou des données. Regardez le contenu et essayez de déterminer ce qui le produit. La cause la plus courante est constituée par des scripts de démarrage de shell mal configurés (tels que .cshrc ou .profile) contenant des instructions de sortie pour les connexions non interactives.
Essayer ceci sur mon système a produit ce qui suit dans out.dat:
ssh-dummy-shell: Commande non autorisée.
Comme je le pensais, l'hôte n'autorise pas les connexions SSH.
Le lien suivant montre qu'il est possible d'accomplir cette tâche en utilisant un fusible avec sshfs - toutefois, il est extrêmement lent et ne convient pas à une utilisation en production.
Existe-t-il une chance de faire fonctionner sftp rsync?
csync /home/csync sftp://[email protected]:2222/home/csync
voir cette réponse .lftp -e "mirror -eRv /local/dir/ /remote/dir; quit;" sftp://user@server:port
Réponses:
Malheureusement pas directement.
rsync
nécessite un lien propre avec un shell qui lui permettra de démarrer la copie distante dersync
, lorsqu'il est exécuté de cette manière.Si vous êtes en mesure d'exécuter des processus d'écoute de longue durée sur l'hôte, vous pouvez essayer de démarrer rsync en écoutant manuellement les connexions sur un port non privilégié, mais la plupart des techniques permettant de le faire nécessiteraient également un accès approprié au shell via SSH. les arrangements de pare-feu des hôtes laissant les connexions entrer sur le port que vous avez choisi (et l'hôte ayant rsync installé en premier lieu). L'exécution de rsync en tant que service adressable publiquement (plutôt qu'indirectement via SSH ou similaire) n'est généralement pas recommandée pour les données non publiques.
Si votre hôte autorise les scripts en PHP ou similaire et ne le verrouille pas afin que des processus supplémentaires ne puissent pas être
exec
édités par des scripts utilisateur, vous pouvez essayer de démarrer rsync en mode écoute de cette façon. Si votre extrémité est connectable (vous utilisez SSH accessible au monde extérieur), vous pouvez essayer en sens inverse: faire exécuter un script sur rsync sur le serveur, mais au lieu d'écouter les connexions entrantes, demandez-lui de contacter votre service local et de le synchroniser. Cela dépend toujours de l’installation de rsync sur l’hôte, ce qui n’est pas une donnée, ou que vous pouvez télécharger une copie de travail, mais n’a pas les implications de sécurité liées à l’exécution d’un démon rsync de façon publiquement adressable et à la discussion via une connexion non cryptée. canal.Comme décrit ci-dessus, déconner peut s’avérer contraire aux politiques de l’hôte, même si cela fonctionne et risque de vous faire mal. Vous feriez mieux de demander si un shell complet peut être activé pour ce compte et d'abandonner rsync pour cet hôte ou de l'abandonner et de se déplacer ailleurs s'il ne le fait pas.
la source
Théoriquement oui. Vous pouvez monter le système de fichiers distant sur votre ordinateur local à l' aide de FUSE . Ensuite, vous pouvez exécuter une copie locale de rsync entre le répertoire monté et le répertoire local. Personnellement, je n'ai pas essayé cela, mais cela devrait fonctionner en théorie. Il serait probablement beaucoup moins efficace de réaliser rsync sur SSH car il faudrait transférer au moins une partie de chaque fichier pour effectuer la comparaison.
la source
Une alternative à l'utilisation de rsync consiste à utiliser à la place lftp (qui peut se connecter à sftp) et à utiliser la commande mirror. Par exemple on peut faire
la source
un peu tard, mais voici comment je le fais, en utilisant sshfs
la source
Non. Rsync fonctionne en exécutant rsync de l'autre côté et en communiquant avec ce dernier, ce qui signifie qu'une forme d'accès au shell est requise.
la source
Une alternative serait de démarrer rsync en tant que démon et de s'y connecter via un tunnel SSH.
la source
authorized_keys
qui autorise un tunnel spécifique et s'exécute par exemplesleep 86400
. Ensuite, le côté client pourrait alorsrsync
via le tunnel.Option combinant le meilleur de tous
Il semble y avoir les avantages suivants par rapport à d’autres réponses:
rsync
démonJe ne l'ai pas encore testé, mais j'ai utilisé avec succès toutes ces fonctionnalités sauf
rrsync
.Comment faire
ssh-keygen
(fonctionnalité openSSH)~/.ssh/authorized_keys
(fonctionnalité openSSH)~/.ssh/authorized_keys
associez cette clé à une commande spécifique, avec (fonctionnalité openSSH) en utilisant comme commande le scriptrrsync
distribué avec rsync, quelque chose comme:command="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-
Ensuite, vous pouvez rsync du client normalement.
Si vous avez besoin de plus de détails
Restreindre l'accès SSH à rsync | Guy Rutenberg
Un pas au-delà du lien ci-dessus
La commande à la fin de cette page peut être raccourcie. Dans
~/.ssh/config
créer une strophe comme ceci:Host remote # can be host or ip or custom-label User user # login on remote host HostName optional-dns-resolvable-host-or-ip # if label used above IdentityFile ~/.ssh/id_remote_backup
alors votre commande rsync du client
devient
la source
rsync
puisse être exécuté, en contournant l’aspect SFTP. Si on vous présente le serveur SFTP de quelqu'un d'autre sur lequel vous n'avez aucun contrôle, cette réponse ne pourra pas résoudre le problème.