Rsync sur ssh, fonctionne très bien à chaque fois.
Cependant, essayer de rsync vers un hôte qui autorise uniquement les connexions sftp, mais pas les connexions ssh, fournit l'erreur suivante:
rsync -av/source ssh user @ remotehost:/target /
incompatibilité 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) sur compat.c (171) [expéditeur = 3.0.6]
Voici la section pertinente de la page de manuel rsync:
Ce message est généralement provoqué par vos scripts de démarrage ou votre installation Shell distante produisant des déchets indésirables sur le flux que rsync utilise pour son transport. La façon de diagnostiquer ce problème consiste à exécuter votre shell distant comme ceci:
ssh remotehost /bin/true > out.dat
puis regardez out.dat. Si tout fonctionne correctement, out.dat doit être un fichier de longueur nulle. Si vous obtenez l'erreur ci-dessus 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 les scripts de démarrage Shell mal configurés (tels que .cshrc ou .profile) qui contiennent des instructions de sortie pour les connexions non interactives.
L'essai 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.
Ce qui suit link montre qu'il est possible d'accomplir cette tâche en utilisant Fuse with sshfs - cependant il est extrêmement lent et ne convient pas à une utilisation en production.
Y a-t-il une chance de faire fonctionner rsync sftp?
Malheureusement pas directement. rsync
nécessite un lien propre avec un shell qui lui permettra de démarrer la copie distante de rsync
, lorsqu'elle est exécutée 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 pouvez essayer de démarrer manuellement rsync en écoutant les connexions sur un port non privilégié, mais la plupart des techniques pour ce faire nécessiteront également un accès Shell correct via SSH, et il s'appuie sur les dispositions du pare-feu des hôtes permettant 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 adressable au public (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 pour que les processus supplémentaires ne puissent pas être exec
ed par les scripts utilisateur, alors vous pouvez essayer de démarrer rsync en mode d'écoute Si votre extrémité est connectable (vous exécutez SSH accessible au monde extérieur), vous pouvez essayer ceci à l'envers - demandez à un script d'exécuter rsync sur le serveur mais au lieu d'écouter les connexions entrantes, contactez votre service local et synchronisez Cela repose toujours sur l'installation effective de rsync sur l'hôte, ce qui n'est pas une donnée, ou sur le fait que vous pouvez télécharger une copie de travail, mais cela n'a pas les implications en termes de sécurité d'exécuter un démon rsync de manière adressable publiquement et de lui parler une chaîne non cryptée.
Déconner comme décrit ci-dessus peut être contraire aux politiques des hôtes, même si cela fonctionne, et pourrait vous faire démarrer. Il vaut mieux demander si un Shell complet peut être activé pour ce compte et abandonner rsync pour cet hôte ou abandonner cet hôte et se déplacer ailleurs s'il ne le fait pas.
Théoriquement, oui. Vous pouvez monter le système de fichiers distant sur votre machine locale en utilisant Fuse . Vous pouvez ensuite 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. Il serait probablement beaucoup moins efficace que d'effectuer la rsync sur SSH car il faudrait transférer au moins une partie de chaque fichier pour effectuer la comparaison.
Une alternative à l'utilisation de rsync est d'utiliser à la place lftp (qui peut se connecter à sftp) et d'utiliser la commande miroir. Par exemple, on peut faire
lftp
~> open -u user,password sftp://Host.com
~> mirror remotedir outdir
~> quit
un peu tard, mais voici comment je le 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
Il semble avoir les avantages suivants que d'autres réponses n'ont pas ici:
rsync
Je ne l'ai pas encore testé, mais j'ai réussi à utiliser toutes ces fonctionnalités sauf rrsync
.
ssh-keygen
(fonction openSSH)~/.ssh/authorized_keys
(fonction openSSH)~/.ssh/authorized_keys
(fonction openSSH) utilisant comme commande le script rrsync
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.
Restreindre l'accès SSH à rsync | Guy Rutenberg
La commande à la fin de cette page peut être raccourcie. Dans ~/.ssh/config
créez une strophe comme celle-ci:
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
puis votre commande rsync du client
rsync -e "ssh -i $HOME/.ssh/id_remote_backup" -av user@remote: etc2/
devient
rsync -av user@remote: etc2/
Non. Rsync fonctionne en exécutant rsync de l'autre côté et en communiquant avec lui, ce qui signifie qu'une certaine forme d'accès Shell est requise.
Une alternative serait de démarrer rsync en tant que démon et de s'y connecter via un tunnel SSH.