Je ne peux pas sftp directement dans un hôte particulier. Pour déplacer un fichier de ma machine domestique vers l'hôte, je dois transférer un fichier vers un hôte intermédiaire; ssh dans l'hôte intermédiaire; et sftp le fichier vers la destination finale. Est-il possible d'éviter une telle folie?
11
Vous pouvez utiliser l'option ProxyCommand de SFTP pour tunneler de manière transparente une connexion SFTP sur une connexion SSH (un peu similaire à la réponse de WhiteFang34, mais sur stdin & stdout de la connexion SSH, plutôt qu'un port TCP local transféré):
(Cela suppose que l'hôte intermédiaire a installé netcat en tant que / usr / bin / nc - sinon, vous devrez peut-être trouver / installer un moyen équivalent de passer stdin et stdout dans une session TCP.)
Ce qui est vraiment cool avec cette option, c'est que vous pouvez l'ajouter à votre fichier ~ / .ssh / config, ce qui la rend transparente:
Avec cette entrée, vous pouvez utiliser sftp, scp et ssh pour finalhost, et il invoquera automatiquement le tunnel. La seule partie non transparente est qu'il vous demandera deux mots de passe (hôte intermédiaire suivi de l'hôte final), mais si vous le souhaitez, vous pouvez également l'éliminer avec les paires de clés SSH ...
la source
exec
nécessaire? (Cela fonctionne bien ici sans cette partie.)Vous pouvez diriger les données vers le processus ssh exécuté sur votre machine, puis exécuter une commande sur la machine intermédiaire qui lit stdin et l'envoie à sftp, le cas échéant.
Cela peut être fait dans un oneliner sur votre machine locale, bien que la citation des arguments à ssh nécessitera du soin. Je suis actuellement sur mon téléphone et je ne peux malheureusement pas saisir les détails. Peut-être que quelqu'un d'autre peut compléter cette réponse comme un exercice!
la source
Je suppose que l'hôte final est protégé par un pare-feu et je ne peux que deviner les méthodes que vous pourriez utiliser pour le contourner.
Par exemple - exposez ssh de votre machine locale, puis ssh au premier hôte, puis ssh au second et sftp de l'hôte final à votre machine.
la source
disons que A et B sont les premier et deuxième hôtes. Et le fichier à copier est foo
Au lieu de sftp, vous pouvez utiliser ce qui suit
chat foo | ssh Un "chat -> foo"
Maintenant, vous pouvez chaîner 2 d'entre eux en série
chat foo | ssh A "cat - | ssh B \" cat -> foo \ ""
la source