85 votes

Est-il possible d'utiliser rsync sur sftp (sans ssh Shell) ?

Rsync sur ssh, ça marche très bien à chaque fois.

Cependant, en essayant de rsynchroniser avec un hôte qui n'autorise que les connexions sftp, mais pas les connexions ssh, on obtient l'erreur suivante :

rsync -av /source ssh user@remotehost:/target/

de la version du protocole -- est-ce que votre Shell est-il propre ? (voir la page de manuel rsync pour une explication) Erreur rsync : incompatibilité de protocole (code 2) à compat.c(171) [sender=3.0.6]

Voici la section pertinente de la page de manuel rsync :

Ce message est généralement causé par votre scripts de démarrage ou par votre installation scripts distante produisant des des déchets indésirables sur le flux que rsync utilise pour son transport. La façon de diagnostiquer ce problème est d'exécuter votre installation de remote scripts comme ceci :

          ssh remotehost /bin/true > out.dat

puis regardez le fichier out.dat. Si tout fonctionne correctement, alors out.dat devrait être un fichier de longueur nulle. Si vous obtenez l'erreur ci-dessus de rsync vous trouverez probablement que out.dat contient du texte ou des données. données. Regardez le contenu et essayez de ce qui le produit. Le site cause la plus com cause la plus fréquente est une configuration incorrecte des Shellde démarrage Shell (tels que les fichiers comme .cshrc ou .profile) qui contiennent des des instructions de sortie pour les connexions non interactives.

En essayant cela sur mon système, j'ai obtenu le résultat suivant dans out.dat :

ssh-dummy-Shell : Commande non autorisée.

Comme je le pensais, l'hôte n'autorise pas les connexions ssh.

Les éléments suivants enlace montre qu'il est possible d'accomplir cette tâche en utilisant fuse avec sshfs - cependant, c'est extrêmement lent, et pas adapté à une utilisation en production.

Y a-t-il une chance de faire fonctionner rsync sftp ?

46voto

David Spillett Points 22424

Malheureusement pas directement. rsync nécessite un lien propre avec un Shell qui lui permettra de démarrer la copie distante de rsync lorsqu'il est exécuté de cette façon.

Si vous avez un moyen d'exécuter des processus d'écoute de longue durée sur l'hôte, vous pourriez essayer de démarrer rsync manuellement en écoutant les connexions sur un port non privilégié, mais la plupart des techniques pour le faire nécessiteraient un accès Shell approprié via SSH également, et cela dépend des dispositions du pare-feu de l'hôte laissant entrer les connexions 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 accessible au public (plutôt qu'indirectement via SSH ou autre) n'est généralement pas recommandée pour les données non publiques.

Si votre hébergeur permet l'utilisation de scripts PHP ou similaires et qu'il n'est pas verrouillé de manière à ce que des processus supplémentaires ne puissent pas être utilisés, vous devez vous assurer qu'il n'y a pas de problème. exec ed par l'utilisateur scripts, alors vous pourriez essayer de démarrer rsync en mode écoute de cette façon. Si votre extrémité est connectable (vous exécutez SSH accessible au monde extérieur), vous pourriez essayer ceci en sens inverse - avoir un scripts qui exécute rsync sur le serveur, mais au lieu d'écouter les connexions entrantes, il contacte votre service local et se synchronise de cette façon. Cela repose toujours sur le fait que rsync soit réellement installé sur l'hôte, ce qui n'est pas acquis, ou que vous puissiez télécharger une copie de travail, mais n'a pas les implications de sécurité de l'exécution d'un démon rsync de manière publiquement adressable et de lui parler sur un canal non crypté.

La manipulation décrite ci-dessus peut être contraire à la politique de l'hôte, même si elle fonctionne, et peut vous faire renvoyer. Il vaut mieux demander si un Shell complet peut être activé pour ce compte et soit abandonner rsync pour cet hôte, soit abandonner cet hôte et déménager ailleurs s'ils ne le font pas.

36voto

xioxox Points 519

Une alternative à l'utilisation de rsync est d'utiliser plutôt lftp (qui peut se connecter à sftp) et d'utiliser la commande mirror. Par exemple, on peut faire

lftp
~> open -u user,password sftp://host.com
~> mirror remotedir outdir
~> quit

26voto

Glomek Points 12183

Théoriquement, oui. Vous pouvez monter le système de fichiers distant sur votre machine locale. en utilisant FUSE . Vous pouvez alors exécuter une copie locale de rsync entre le répertoire monté et le répertoire local. Je n'ai pas personnellement essayé cela, mais cela devrait fonctionner en théorie. Ce serait probablement beaucoup moins efficace que d'effectuer le rsync par SSH car il faudrait transférer au moins une partie de chaque fichier pour effectuer la comparaison.

17voto

dardisco Points 171

Au lieu de Rsync, rclone prend en charge la synchronisation depuis/vers et le montage de partages réseau SFTP.

  1. Installer rclone
  2. rclone config et suivez les étapes pour ajouter une nouvelle configuration de point de terminaison distant. Entrée sftp lors de la sélection du backend du protocole.
  3. rclone sync local_path remote:remote_path ( docs )

IMO, rclone fournit une CLI plus facile à automatiser que LFTP .

Je sais que cela ne répond pas à la question initiale mais probablement aux besoins de certaines personnes qui viennent ici.

6voto

jonathan Points 71

Un peu tard, mais voici comment je fais, en utilisant sshfs

  source /scratch/slimdata/password.sh
  mkdir tmp_mnt
  echo $PASSWORD | sshfs user@host:dir tmp_mnt -o password_stdin
  rsync -rutL --delete tmp_mnt/ to_sync/
  fusermount -u tmp_mnt
  rmdir tmp_mnt

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X