Fichiers Rsync via un hôte intermédiaire

22

Je suis actuellement loin de mon réseau local et je dois faire une sauvegarde de mon ordinateur portable. J'ai une copie quelque peu récente de mon ordinateur portable sur mon serveur et je sauvegarde généralement l'ordinateur portable à l'aide de rsync. Maintenant, je souhaite le faire, mais en dehors de mon réseau local.

En bref, je veux envoyer des données de A à C via B, où A est mon ordinateur portable, B mon routeur et C mon serveur.

J'ai trouvé cette commande:, A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destinationqui fonctionne bien pour transférer des fichiers via scp - mais comme j'ai déjà la plupart des données sur mon serveur, je souhaite utiliser rsync pour synchroniser uniquement le delta.

J'ai essayé:, A$ rsync file -e 'ssh B ssh' Cet cela fonctionne pour autant que je suis invité à donner le mot de passe pour l'utilisateur: C. Cependant, lorsque j'entre le mot de passe, rien ne se passe. Le routeur exécute Tomato v1.28 et je ne peux pas le configurer pour utiliser un fichier de configuration ssh pour lui permettre de se connecter à C sans mot de passe.

Des idées sur la façon de faire fonctionner cela?

GLaDER
la source
2
utilisez la même ProxyCommanddans le fichier de configuration. Rsync devrait reprendre cela.
Jakuje

Réponses:

30

Cette question est essentiellement répondue ailleurs, y compris ici pour scp et ici pour rsync . Étant donné que cette dernière comprend ma réponse, mais qu'aucune réponse n'a été acceptée, je vais la répéter ici.

Comme vous l'avez noté, vous pouvez utiliser rsyncl' -e | --rshoption de, mais ça va être un peu plus compliqué:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/

Ou, si votre version de sshest suffisamment nouvelle (OpenSSH> = v7.3), vous pouvez utiliser l' option -J( ProxyJump)

rsync -azv -e 'ssh -A -J USER@PROXYHOST:PORT' foo/ dest:./foo/

Notez que j'utilise -A(transfert d'agent) mais cela devrait également fonctionner avec l'authentification par mot de passe si vous n'utilisez pas de clés, et, bien sûr, vous pouvez remplacer proxypar Bet destavec Cdans votre exemple.

Si par hasard vous n'avez pas une nouvelle sshversion suffisante (> = 5.3, IIRC), vous pouvez utiliser à la netcatplace de l' -Woption pour ssh:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/

Enfin, comme déjà indiqué dans les commentaires, vous pouvez mettre le ProxyCommanddans votre $HOME/.ssh/configfichier afin que vous n'ayez pas à avoir une ligne de commande aussi compliquée. Plus précisément, ajoutez quelque chose comme ceci:

Host C
  ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p

Ou, en utilisant ProxyJumppour OpenSSH> = v 7.3:

Host C
  ProxyJump PROXYHOST

Vous devriez alors pouvoir simplement faire:

rsync -azv foo/ C:./foo/
aigrette cramoisie
la source