Notez que je ne peux pas d'abord stocker le fichier localement - il est trop gros.
Cette page (odieuse) (faites défiler l'écran jusqu'en bas) semble donner une réponse, mais je ne parviens pas à démêler la partie spécifique aux lecteurs de bande:
Pour rendre cela plus concret, voici comment cela pourrait fonctionner:
Sur la machine locale:
% echo "pretend this string is a huge amt of data" | scp - remote.com:big.txt
(Cela utilise la convention - ce que scp ne supporte pas en fait - de substituer un tiret au fichier source pour lui dire de l'obtenir de stdin à la place.)
Réponses:
Vous pouvez diriger vers SSH et exécuter une commande à distance. Dans ce cas, la commande distante consiste à
cat > big.txt
copier stdin dans lebig.txt
fichier.C'est simple et facile, tant que vous pouvez utiliser ssh pour vous connecter à l'extrémité distante.
Vous pouvez également utiliser
nc
(NetCat) pour transférer les données. Sur la machine réceptrice (par exemple, host.example.com):Ceci sera configuré
nc
pour écouter le port 1234 et copier dans lebig.txt
fichier tout élément envoyé à ce port . Ensuite, sur la machine d'envoi:Cette commande indiquera
nc
au côté émetteur de se connecter au port 1234 du récepteur et de copier les données de stdin sur le réseau.Cependant, la
nc
solution présente quelques inconvénients:ssh
.ssh
solution, vous pouvez lancer le transfert à partir d'un seul des points d'extrémité.la source
tar -cvzf >(ssh destination 'cat > file') huge_directory_tree
nc
cela, il offre également le cryptage et la compression de vos données par défaut et plus important encore: la détection d'erreur. J'ai eu des situations où j'ai utilisénc
avec un pilote réseau défectueux et des données corrompues ont été transmises sans être détectées. SSH échouera dans cette situation, car il ne peut pas décrypter / décompresser les données défectueuses.Utilisation de ssh:
la source
Utilisez nc (Net Cat), qui n'a pas besoin de sauvegarder le fichier localement.
la source
nc
pour cela. Une fois, j'ai transféré une image de disque brute d'une machine à une autre, mais j'ai appris beaucoup plus tard que mon pilote de réseau était défectueux et que des bits défectueux avaient été transférés. Utilisezscp
,ssh
ou toute autre chose qui vous dira quand il y a une erreur de transmission.Utilisez un tuyau FIFO:
la source
scp
s’est plaint que mypipe n’était pas un fichier ordinaire.mkfifo
pour créer le tuyau, cependant.)scp <(ls) destination
Merci Denis Scherbakov!
Quand j’ai essayé votre script sur le nuage Hetzner, j’ai eu
Mais seul un fichier sans contenu a été créé. Comme le contenu actuel est déjà chiffré avec openssl, nous n’avons pas besoin de scp. Le Linux intégré a
ftp
également d'excellentes capacités de tuyauterie. Alors voici ma solution (encore tout à fait manuelle):la source
Voici une solution alternative:
Tous les exemples ci-dessus suggèrent que ssh + cat suppose que "cat" est disponible sur le système de destination.
Dans mon cas, le système (sauvegarde Hetzner) avait un ensemble d'outils très restrictif offrant sftp, mais pas un shell complet. Donc, utiliser ssh + cat n'était pas possible. Je suis venu avec une solution qui utilise le drapeau "scp -t" non documenté. Le script complet peut être trouvé ci-dessous.
Mise à jour 2019.05.08:
Selon la demande, vous trouverez ci-dessous une version beaucoup plus simple et plus courte.
la source
scp -t
? À l'heure actuelle, vous disposez d'un script complet hautement personnalisé / localisé dans votre environnement. Une bonne chose pour le wiki de Hetzner, mais pas pour le super utilisateur où la plupart des gens cherchent simplement comment canaliser les entrées via scp.