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 username@bridge.work.com ssh username@10.10.10.130
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 username@bridge.work.com ssh username@10.10.10.130 '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.
Doesn't work:
On the remote machine, if I run
tar cf - tmp/file* | md5sum
f1b776364c10dfc20500f228399a7c63 -
From the local machine:
ssh -tA username@bridge.work.com ssh username@10.10.10.130 '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.
Best Answer
Use the SSH ProxyCommand configuration option to in the configuration on your client. This allows you to make a direct connection to the destination.
scp remotebox:file local