Comment effectuer une rsync sécurisée entre des serveurs sur un réseau non sécurisé

19

Fondamentalement, ce que je demande, est-ce que quelqu'un a trouvé un moyen d'envelopper rsync dans ssh.

Avec OpenSSH v4.9 + sftp a de belles options qui vous permettent de chrooter la connexion entrante et ainsi de suite - et c'est une solution que j'examinerais, mais je suis coincé avec RHEL, et ni RHEL4 ni RHEL5 ne sont jusqu'à cette version de ssh.

Ma solution actuelle consiste à ajouter quelque chose comme ça du côté serveur en utilisant la clé de l'utilisateur client ...

serveur% cat ~ / .ssh / authorized_keys
command = "cd / srv / rsync / etl && tar --exclude './lost+found' -pcf - ./" ssh-rsa ...

... et donc le client serait alors limité à une seule chose et une seule chose ...

client% ssh -T -i $ {HOME} /. ssh / id_rsa [email protected]> sensative.tar

Cela sécurise la connexion, ainsi que le serveur (du client), mais est inefficace car tous les fichiers seront récupérés encore et encore.

Je suis après avoir fait quelque chose de similaire (ou tout simplement mieux) en utilisant rsync.

Xerxès
la source

Réponses:

18

Rsync prend en charge l'utilisation de ssh comme transport

rsync -az /path/to/source username@host:/path/to/destination

certaines anciennes versions de rsync vous obligent à spécifier ssh explicitement

rsync -aze ssh /path/to/source host:/path/to/destination

Une alternative à l'utilisation de rsync est Unison de BC Pierce , qui a des fonctionnalités similaires à rsync, mais conserve un index local aux deux extrémités pour éviter d'avoir à parcourir le système de fichiers pour calculer les deltas

Dave Cheney
la source
Merci pour votre réponse rapide! J'aurais dû mentionner que j'ai aussi étudié cela - le problème (dans mon cas) avec cela est qu'il ne restreint pas / ne chroote pas l'utilisateur. S'il était possible de parler au service rsync via ssh (c'est-à-dire en utilisant la syntaxe à deux points de la définition de la télécommande) - ce serait parfait - mais ce qui précède ne fonctionne qu'avec un seul deux-points - c'est-à-dire via ssh, et donc pas de chrootage.
Xerxes
J'ai oublié de mentionner - Unison a l'air bien, et je vais garder un lien vers cela - mais dans ce cas - je ne peux rien installer en dehors de celui proposé par RHN - qui est boiteux, mais hors de mon contrôle.
Xerxes
Encore une autre restriction que je devrais mentionner est que la connexion doit être établie à partir du client - du côté <i> tirant </i>, et non du serveur. (La poussée côté serveur serait naturellement facile à sécuriser le serveur car le client n'a pas son mot à dire, mais ne s'applique pas à mon problème actuel).
Xerxes
1
serveur rsync -az: / chemin / chemin / sur / client?
Dave Cheney
1
Pourquoi le chroot? Vous savez qu'un chroot n'améliore pas vraiment la sécurité. De plus, si vous sortez déjà en fournissant ssh, rsync sur ssh ne réduit pas la sécurité du système. Pensez également à ce que rsync sur ssh fait appeler le binaire rsync sur le serveur. Vous pouvez le sécuriser de la même manière que vous sécurisez votre commande de copie.
Paul de Vrieze
5

D'accord, j'ai finalement compris cela, mais la solution n'est pas aussi élégante que je l'espérais.

Côté serveur, vous devez ajouter ce qui suit au fichier authorized_keys pour l'utilisateur concerné ...

no-pty, command="exit"

Sur le client, vous pouvez ensuite créer un tunnel comme suit ...

ssh -l username -fNTL 8073:server:873

Une fois le tunnel établi, vous pouvez rsync comme d'habitude - en utilisant la syntaxe à deux points n'est pas possible - à localhost.

Le numéro de port localhost que vous sélectionnez (8073) est entièrement facultatif évidemment, rappelez-vous simplement que c'est ce que vous devez rsync pour ...

rsync --port=8073 -a user@localhost::mySecureStore /srv/some/place/
Xerxès
la source