2 votes

comment télécharger un flux en utilisant ssh ?

Sur une machine distante, je veux lancer une commande qui produit lentement un gros flux (compression de flux) et en même temps commencer à télécharger ce flux. je ne veux pas d'abord enregistrer le flux dans un fichier sur la machine distante car cela prend du temps pour produire tout le contenu et ensuite pour le télécharger. je veux compresser et télécharger en parallèle pour gagner du temps. je peux me connecter en ssh/scp à la machine distante.

J'ai vu : Comment puis-je scpter la sortie (énorme) d'une commande directement sur une machine distante ?

mais je veux tirer, pas pousser

6voto

Jakuje Points 9351

Vous pouvez le faire de la même manière :

ssh -T user@example.com 'producing_command' > big.txt

Il suffit d'exécuter la commande de production sur le serveur et d'écrire dans le fichier local.

1voto

Jurjen Points 196

Bien que je sois d'accord avec la réponse consistant à faire passer la sortie par STDOUT et par SSH, j'aimerais proposer une autre perspective :

Vous pouvez utiliser SSHfs (un système de fichiers FUSE) sur la machine distante pour monter un répertoire à partir de votre machine locale, puis y écrire. Si nécessaire, cette opération peut être relayée par une connexion de votre machine locale à la machine distante.

Exemple A :

LOCAL$  ssh user@remotemachine.tld
REMOTE$ sshfs user@localmachine.tld:/directory/on/localmachine /directory/on/remotemachine
REMOTE$ bigstreamcommand >/directory/on/remotemachine/bigstreamfile

En conséquence, la sortie sera lentement écrite dans /directory/on/localmachine/bigstreamfile

Si vous ne pouvez pas accéder à la machine locale depuis la machine distante par SSH direct (NAT sans transfert de port, CGNAT, pare-feu, ...), suivez les instructions suivantes
Exemple B :

LOCAL$  ssh user@remotemachine.tld -R54223:localhost:22
REMOTE$ sshfs -p54223 user@localhost:/directory/on/localmachine /directory/on/remotemachine
REMOTE$ bigstreamcommand >/directory/on/remotemachine/bigstreamfile

La seule condition pour que l'exemple B fonctionne est que vous exécutiez un serveur SSH sur votre machine locale. Vous connectez sshfs à localhost:54223, car il s'agit d'un tunnel inverse de la machine distante, redirigeant toutes les connexions à travers votre connexion SSH initiale et vers le serveur SSH sur votre machine locale.

Ce n'est peut-être pas aussi simple, mais c'est beaucoup plus flexible, dans le sens où vous pouvez exécuter des opérations de fichiers arbitraires depuis la machine distante, directement sur votre système de fichiers local. Je ne recommande pas d'exécuter des commandes qui ont besoin de lire Il n'est pas possible de transférer beaucoup de données par ce biais, car elles devront alors être envoyées de votre ordinateur local à l'ordinateur distant, ce qui, sur les connexions résidentielles, a tendance à être lent. L'écriture de gros fichiers sur votre machine locale devrait être beaucoup plus rapide, tout comme la bande passante de téléchargement est plus importante pour les connexions résidentielles.

Pour plus de détails, veuillez relire puis consulter man sshfs .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X