Rsync sur ssh avec accès root des deux côtés

14

J'ai un serveur ubuntu plus ancien et un serveur debian plus récent et je migre les données de l'ancien vers le nouveau. Je veux utiliser rsync pour transférer des données afin de rendre la migration finale plus facile et plus rapide que le processus tar / scp / untar équivalent.

Par exemple, je souhaite synchroniser les dossiers de départ un par un avec le nouveau serveur. Cela nécessite un accès root aux deux extrémités car tous les fichiers côté source ne sont pas lisibles par tous et la destination doit être écrite avec les autorisations appropriées dans / home. Je ne peux pas comprendre comment donner un accès root à rsync des deux côtés.

J'ai vu quelques questions connexes, mais aucune ne correspond tout à fait à ce que j'essaie de faire.

J'ai installé sudo et je travaille sur les deux serveurs.

Tim Abell
la source

Réponses:

14

En fait, vous n'avez PAS besoin d'autoriser l'authentification root via SSH pour exécuter rsync comme le suggère Antoine. Le transport et l'authentification du système peuvent être entièrement effectués sur les comptes d'utilisateurs tant que vous pouvez exécuter rsync avec sudo aux deux extrémités pour lire et écrire les fichiers.

En tant qu'utilisateur sur votre serveur de destination, vous pouvez aspirer les données de votre serveur source comme ceci:

sudo rsync -aPe ssh --rsync-path='sudo rsync' boron:/home/fred /home/

L'utilisateur que vous exécutez en tant que sur les deux serveurs aura besoin d'un accès sans mot de passe * sudo au binaire rsync, mais vous n'avez PAS besoin d'activer la connexion ssh en tant que root. Si l'utilisateur que vous utilisez ne correspond pas à l'autre extrémité, vous pouvez ajouter user @ boron: pour spécifier un autre utilisateur distant.

Bonne chance.

* ou vous devrez avoir entré le mot de passe manuellement dans la fenêtre de temporisation.

Caleb
la source
5
Bien que ce soit une vieille question, j'aimerais ajouter un mot de ATTENTION à cette réponse acceptée. D'après ma compréhension, autoriser "sudo rsync" sans mot de passe équivaut à ouvrir le compte root pour une connexion à distance. En effet, avec cela, il est très facile d'obtenir un accès root complet, par exemple parce que tous les fichiers système peuvent être téléchargés, modifiés et remplacés sans mot de passe.
Ascurion du
3

Si vos données ne sont pas très sensibles, vous pouvez utiliser taret socat. D'après mon expérience, c'est souvent plus rapide que rsyncsur ssh.

Vous avez besoin socatounetcat deux côtés.

Sur l'hôte cible, accédez au répertoire dans lequel vous souhaitez placer vos données, après cette exécution:
socat TCP-LISTEN:4444 - | tar xzf -

Si l'hôte cible écoute, démarrez-le sur la source comme:
tar czf - /home/fred /home/ | socat - TCP:ip-of-remote-server:4444

Pour cette configuration, vous aurez besoin d'une connexion fiable entre les 2 serveurs.

zagyi
la source
Bon point. Dans un environnement de confiance, vous gagnerez beaucoup de vitesse en ne chiffrant pas. Cela n'a peut-être pas d'importance sur les petits fichiers, mais avec des Go de données, cela le sera.
pboin
2

Ok, j'ai rassemblé tous les indices pour obtenir quelque chose qui fonctionne pour moi.

Permet d'appeler les serveurs "src" & "dst".

Configurez une paire de clés pour root sur le serveur de destination et copiez la clé publique sur le serveur source:

dest $ sudo -i
dest # ssh-keygen
dest # exit
dest $ scp /root/id_rsa.pub src:

Ajoutez la clé publique aux clés autorisées de root sur le serveur source

src $ sudo -i
src # cp /home/tim/id_rsa.pub .ssh/authorized_keys

De retour sur le serveur de destination, récupérez les données avec rsync:

dest $ sudo -i
dest # rsync -aP src:/home/fred /home/
Tim Abell
la source