Dois-je sftp vers un serveur intermédiaire?

Je ne peux pas sftp directement dans un hôte particulier. Pour déplacer un fichier de ma machine à domicile vers l'hôte, je dois déposer un fichier dans un hôte intermédiaire; Ssh dans l'hôte intermédiaire; Et sftp le fichier à la destination finale. Est-il possible d'éviter une telle folie?

De votre machine locale, vous pouvez créer un tunnel SSH par l'intermédiaire de l'hôte hôte vers l'hôte final:

ssh user@intermediate -L 2000:final:22 -N 

Cela ouvrira le port 2000 sur votre localhost qui se connectera directement au serveur final sur le port 22, en tunnelant à travers l'hôte intermédiaire. Maintenant, dans une autre invite, connectez-vous avec sftp sur le port 2000 pour être connecté au serveur final, notant que l'utilisateur spécifié ici est pour l'hôte final:

 sftp -P 2000 user@localhost 

Cela semble appartenir à superuser.com ou serverfault.com .

Vous pouvez utiliser l'option ProxyCommand de SFTP pour forcer de manière transparente une connexion SFTP sur une connexion SSH (un peu similaire à la réponse de WhiteFang34, mais sur le stdin & stdout de la connexion SSH, plutôt que sur un port TCP local transféré):

 sftp -o "ProxyCommand=ssh -e none user@intermediatehost exec /usr/bin/nc %h %p 2>/dev/null" user@finalhost 

(Cela suppose que l'hôte intermédiaire a netcat installé comme / usr / bin / nc – sinon, il se peut que vous deviez trouver / installer un moyen équivalent de passer la stdin & stdout dans une session TCP).

Ce qui est très cool à propos de cette option, c'est que vous pouvez l'ajouter à votre fichier ~ / .ssh / config, ce qui le rend transparent:

 Host finalhost ProxyCommand ssh -e none user@intermediatehost exec nc %h %p 2>/dev/null 

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 demandera deux mots de passe (l'hébergement intermédiaire suivi de l'hôte final), mais si vous le souhaitez, vous pouvez l'éliminer également avec les clés de secours SSH …

Vous pouvez transférer des données vers le processus ssh en cours d'exécution 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 en ligne sur votre machine locale, bien que la citation des arguments à ssh nécessite des soins. Je suis sur mon téléphone maintenant, malheureusement, je ne peux pas taper les détails. Peut-être quelqu'un d'autre peut-il compléter cette réponse en tant qu'exercice!

Je suppose que l'hôte final est fermé et je ne peux que deviner les méthodes que vous pourriez utiliser pour le contourner.

Par exemple, exposez ssh à votre machine locale, puis ssh au premier hôte, puis ssh à la seconde et sftp de l'hôte final à votre machine.

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 les éléments suivants

Chat foo | Ssh A "chat -> foo"

Maintenant, vous pouvez enchaîner deux d'entre eux ensemble

Chat foo | Ssh A "chat – | ssh B \" chat -> foo \ ""