I have a Linux box at work that I often log in to from home. The Linux box is on an internal network, but there's a box that spans both networks, so I can log in like so:
ssh -tA email@example.com ssh firstname.lastname@example.org
I have a couple of files sitting in ~/tmp that I would like to copy to my local machine. (let's call them ~/tmp/file1 ~/tmp/file2 and ~/tmp/file3 for the sake of argument)
I've seen something like this work:
ssh -tA email@example.com ssh firstname.lastname@example.org 'tar cf - ~/tmp/file*' | tar xf -
This would tar the files on the remote machine, send the result to stdout, then pipe the results to a local tar, which was unpacking data on local stdin.
On the remote machine, if I run
tar cf - tmp/file* | md5sum f1b776364c10dfc20500f228399a7c63 -
From the local machine:
ssh -tA email@example.com ssh firstname.lastname@example.org 'tar cf - ~/tmp/file*' | md5sum bc7436c9771ee2b4978ffd29b8b7ed36 -
I'm assuming that this is probably a byte ordering snafu across the network... I was eventually able to get around it by uuencoding the file, catting it across the network then uudecoding it locally... for some reason I couldn't get the syntax correct to be able to tar | uuencode on the remote side and uudecode | untar on the local side.
I'm looking for a good way of doing this all in one step; preferably something that I can wrap in a shell function.