PROBLEM: Backup Hangs when using BackupPC / rsync over ssh to a Windows 2003
server.
WORKAROUND SUMMARY: Backup a Windows 2003 server using by using BackupPC's
Pre and Post commands to establish a forwarding ssh tunnel and a locally
bound Windows rsyncd service. I know what you are thinking - I don't want
to load rsyncd as a service because this creates another security issue.
Wait, we are going to BIND the rsyncd service to 127.0.0.1 and then connect
to it via the forwarding tunnel! Awesome. Performing a backup using this
method will seem weird because you'll be issuing an rsync command on your
BackupPC server against localhost, 127.0.0.1::module, which is forwarded
over to the Windows 2003 server where it then connect to the rsync service
on 127.0.0.1:873. Believe me - it works. I've been using this method for
over a month now without any problems.
HOWTO:
How to backup a Windows 2003 server using BackupPC, rsyncd, and a forwarding
ssh tunnel. The goal was to develop a secure backup method that actually
works. Rsync over ssh from Linux to Windows fails (for me). So, we
developed a secure method that meshes nicely with BackupPC and rsyncd.
Caution: these are my personal notes, following them may crash your system
and result in data loss.
FAILURE: Linux --rsync/ssh--> Windows 2003(sshd):
We spent about a week trying to resolve problems backing up a Windows 2003
server from Linux using rsync over ssh. Almost all of our attempts at
getting a clean backup of Windows 2003 server from a Linux server using
rsync over ssh failed miserably - the backup would simply hang on certain
files. This problem persisted even when we replaced the original Windows
source files with a Volume Shadow Copy - ouch!
SUCCESS: Linux ==rsync (modules)/ssh==> Windows 2003(sshd/rsyncd)
All of our tests using module-based rsync from Linux to Windows 2003 rsyncd
services worked perfectly. So, we developed a simple workaround to secure
rsyncd connections through a forwarding ssh connection. To do this, we bind
rsyncd to localhost on a Window 2003 server and then connect to this service
from our Linux backup server through a forwarding SSH tunnel.
-------------------------------
ESTABLISHING RSYNCD (localhost) AND SSHd ON WINDOWS 2003 SERVER:
* Install cygwin, be sure to include cygrunsrv, openssh and rsync.
* Follow one of the many online guides for setting up cygwin's sshd
(reference: http://pigtail.net/LRP/printsrv/cygwin-sshd.html)
To setup rsync as service in Windows 2003 do the following:
(reference: http://www.gaztronics.net/rsync.php)
Start cygwin:
% vi /etc/rsyncd.conf
use chroot = false
strict mode = false
[backupwww]
path = /cygdrive/c/webserver
read only = false
list = true
comment = BACKUP
ESTABLISH CYGWIN AS A SERVICE
% cygrunsrv -I "Rsyncd" -p /cygdrive/c/cygwin/bin/rsync.exe -a
"--config=/cygdrive/c/cygwin/etc/rsyncd.conf --daemon --no-detach --address=
127.0.0.1" -f "Rsyncd daemon service on localhost" -u Administrator
********************************************************************
***IMPORTANT: BE SURE TO USE "--address=127.0.0.1" *
********************************************************************
START SERVICE:
% cygrunsrv --list
% cygrunsrv --start sshd
% cygrunsrv --start Rsynd
Now, we are ready to test our new services.
TESTING: ESTABLISH THE FORWARDING TUNNEL:
TESTING: On your Linux backup server issue this command:
TESTING: linux% ssh -L 1500:127.0.0.1:873 -l user myserver.my.domain
TESTING: This command will establish a tunnel to "myserver" where new
connections to the local linux port on 1500 are forwarded over to the remote
side and actually connect to 127.0.0.1:873. That is to say, local
connections to 127.0.0.1:1500 are: (a) FORWARDED through the tunnel and (b)
connected to 127.0.0.1:873 on the remote side.
TESTING: Now that we have this incredibly useful tunnel in place, all we
need to do is run rsync against the localhost:1500 to actually backup the
remote side.
TESTING: Here is an example of the rsync command:
TESTING: linux% "rsync -av --port 1500 127.0.0.1::backupwww /home/backups"
TESTING: In this example, backupwww is the name of your Windows 2003 rsyncd
module. Obviously, /home/backups is the destination on your backup server
where you want to store these test backups.
---------------------------
If everything works, you are ready to configure BackupPC.
====================== BACKUPPC ==========
BACKUPPC: BackupPC (rsyncd method) ------ssh tunnel-----> Windows 2003
Server (sshd/rsyncd)
LINUX: Install BackupPC
LINUX: Setup ssh keys such that user backuppc can ssh over to your Windows
2003 server without supplying a password
(reference: http://backuppc.sourceforge.net/faq/ssh.html)
Pick an alias for your Windows 2003 server to be used by BackupPC. Any name
will do - we'll map this alias to 127.0.0.1 later with "ClientNameAlias".
For this example, I selected securewww1 as an alias for our Windows 2003
server.
linux% vi /BackupPC/conf/hosts
securewww1 0 root webteam
linux% mkdir /BackupPC/pc/securewww1
linux% vi /BackupPC/pc/securewww1/config.pl
do "/BackupPC/conf/securewww1.pl";
LINUX: Install screen
linux% mkdir /BackupPC/scripts
linux% vi /BackupPC/scripts/www1tunnel
#!/bin/bash
TERM=vt100
/usr/bin/screen -d -m -S tunwww1 /usr/bin/ssh -q -x -L 1500:
127.0.0.1:873 -l user myserver.my.domain
/bin/sleep 10
Note: sleep 10? we needed to introduce a small delay to ensure the tunnel
was fully established before rsync started
Note: "-S tunww1" helps us identify the process - so we can kill it when the
backups are finished
Note: This could be done with dtach instead of screen
linux% chown backuppc /BackupPC/scripts/www1tunnel
linux% chmod u+x /BackupPC/scripts/www1tunnel
linux% vi /BackupPC/conf/securewww1.pl
$Conf{ClientNameAlias}='127.0.0.1';
$Conf{DumpPreUserCmd}='/BackupPC/scripts/www1tunnel';
$Conf{DumpPostUserCmd}='/usr/bin/pkill -u backuppc -f tunwww1';
$Conf{RestorePreUserCmd}='/BackupPC/scripts/www1tunnel';
$Conf{RestorePostUserCmd}='/usr/bin/pkill -u backuppc -f tunwww1';
$Conf{XferMethod}='rsyncd';
$Conf{RsyncdClientPort}='1500';
$Conf{RsyncShareName}='backupwww';
$Conf{RsyncdAuthRequired}=0;
-------------
>From the Backuppc management page, reload the configuration file and start a
full backup of securewww1.
I hope this helps someone :-)
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
BackupPC-users mailing list
BackupPC-users@lists.sourceforge.net
List: https://lists.sourceforge.net/lists/listinfo/backuppc-users
Wiki: http://backuppc.wiki.sourceforge.net
Project: http://backuppc.sourceforge.net/