rsync via tunnel - 3 boxes separated by internet [solved]
Jay Strauss
me at heyjay.com
Wed Aug 24 19:25:57 GMT 2005
Hi Wayne, I'm not subscribed anymore, but I once sent you this
example/FAQ. I searched the archives (because I needed to implement
this) and noticed I never posted the solution (like a dummy). Would you
post it for me?
Thanks
Jay
Backing up through a firewall
Its very common to have a setup where you can not reach the machine you
want to backup directly, because it is behind a firewall. Below are
common layouts.
(layout1): you --internet-- firewall -- target
(layout2): you --internet-- firewall -- ssh server -- target
where the "firewall" either lets you log in directly using ssh or the
firewall forwards ssh connections to another machine "ssh server" which
you can log into.
Either way you can't log into the "target" directly from the outside,
but the files you want to back up live on the target.
Below are 2 methods for accomplishing this feat, both have advantages
and disadvantages, your choice.
Method #1 - Use ssh to hop to the target machine
1) Configure passwordless login from the machine which you can log into
(the "firewall" in layout1 and the "ssh server" in layout2) to "target".
Numerous examples of configuring this exist a google away, but in
general on the machine you can log into, you create a public/private key
pair. Copy the public key to the "target" and append the contents of the
public key to the .ssh/auauthorized_keys file.
2) execute your rsync command - its that easy
you~$ rsync -av --rsync-path="ssh target rsync" firewall:/source/ /dest/
This command looks like it is copying a file from the firewall, but the
remote command run on the firewall to start rsync really
contacts the target and runs the remote rsync there, so "/source/"
is coming from the target.
Advantages of Method #1
-----------------------
* you can do it without any sys admin help (avoid the BOFH)
* you can backup any file to which you have access to on the target
Disadvantages of Method #1
--------------------------
* you have to manage you public/private keys
* adds another security hole in that if your login onto the
firewall or ssh server is compromised, the invader can reach the target
easily.
Method #2 - Install and configure an rsync server on the target and use
an ssh tunnel to reach the rsync sever
Installing the rsync server is beyond the scope of this document, but
again it's just a google away.
Once your rsync server is up and running you build an ssh tunnel through
you firewall like:
you~$ ssh -N -l userid_on_firewall -L 873:target:873 firewall
What this does is connects to the firewall, and directs port 873 on
"you" through the ssh tunnel, and out the other end at port 873 on the
target.
Now when rsync is executed, which talks on port 873, the conversation is
directed to the target.
In another window execute
you~$ rsync -arv localhost::<rsync_server_module_name>/source ./dest
Advantages of Method #2
-----------------------
* If you are the one administering the rsync server, you have finer
control over who can access what files
* Removes the passwordless access to the target machine
Disadvantages of Method #2
--------------------------
* More issues with file permissions
* More servers running more stuff to administer
More information about the rsync
mailing list