Fichiers Rsync via un hôte intermédiaire

Je suis actuellement loin de mon réseau local et j'ai besoin de faire une sauvegarde de mon ordinateur portable. J'ai une copie assez récente de mon ordinateur portable sur mon serveur et je retourne habituellement l'ordinateur portable en utilisant rsync. Maintenant, je le souhaite, mais à l'extérieur de mon réseau local.

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

J'ai trouvé cette commande: A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destination , qui fonctionne bien pour le transfert de fichiers via scp – mais puisque 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' C , et cela fonctionne aussi loin que je suis invité à donner le mot de passe pour l'utilisateur: C. Cependant, lorsque je saisis 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 avec un mot de passe.

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

Cette question est essentiellement répondu ailleurs, y compris ici pour scp et ici pour rsync . Puisque ce dernier comprend ma réponse, mais aucune réponse n'a été acceptée, je vais la répéter ici.

Comme vous l'avez noté, vous pouvez utiliser rsync 's -e | --rsh -e | --rsh option, mais ça va être un peu plus compliqué:

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

Notez que j'utilise -A (renvoi d'agent), mais il 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 le proxy par B et dest avec C dans votre exemple.

Si par hasard vous n'avez pas assez de version ssh (> = 5.3, IIRC), vous pouvez utiliser netcat au lieu de -W option to ssh :

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

Enfin, comme vous l'avez déjà mentionné dans les commentaires, vous pouvez placer le ProxyCommand dans votre fichier $HOME/.ssh/config afin de ne pas avoir une ligne de commande si compliquée. Plus précisément, ajoutez quelque chose comme ceci:

 Host C ProxyCommand ssh -AB -p 22 -W %h:%p 

Ensuite, vous devriez pouvoir:

 rsync -azv foo/ C:./foo/