Posts tagged: rsync

使用 rsync 或 unison 备份或同步支持 ssh 的 web 主机

By admin, 2010年03月27日 9:07 上午

使用 web 主机而非 VPS 的站长,站点的备份或同步常常是一个问题。很多站点只能使用 ftp 做单向备份,基于较弱的元信息来判定文件是否需要重新下载,缺乏校验、压缩、增量传输等高级特性。有的服务商在 web 控制面板中提供备份功能,或允许上传简单的 cron 脚本,但这些途径通常只适合备份整站或指定目录,而不方便以增量方式传输更新过的内容。Linux 下成熟的镜像同步工具是 rsync,如果你的 web 主机允许 ssh 登录,则可以考虑使用 rsync 或其它类似工具。

网上有很多说法认为 web 主机不允许跑 daemon、不允许开自定义端口,故而无法使用 rsync。其实不然,rsync 可以仅通过 ssh 连接而不需要开放额外的端口,服务端也可以借助 sshd 来启动而不需要作为 daemon 运行。我们需要的只是 ssh 登录以及运行自己上传的程序的权限。我使用的 Godaddy Economy Plan Hosting (Linux) 即属于这种情况。

Godaddy 的 web 主机不提供 rsync 程序,我们可以从本地上传一个。需要注意上传的 rsync 二进制文件应该与你的 web 主机的平台一致,连接 libc、libpopt 等库的版本一致。对于使用 x86 版 CentOS 5.2 的 Godaddy 主机,我也直接在相同版本的 CentOS 中提取了一个 rsync 上传。这时,在客户端使用“-e”参数指定连接方式为 ssh,用“–rsync-path”参数指定服务端 rsync 所在的位置,即可借助 ssh 连接传输数据了。

rsync -vzrtopgl –progress –delete -e ssh –rsync-path=/[remote_home_dir]/bin/rsync [username]@[hostname]:/[remote_home_dir]/html/ /[local_home_dir]/

如果客户端为 Windows,则可以使用 Win32 下移植的 cwRsync,这个工具基于 cygwin 库但不需要安装整个 cygwin 环境,它同时包含了 Win32 版的 OpenSSH 客户端。上述命令无须修改即可在 Windows 下运行。

rsync 解决了文件的单向的备份或镜像功能,但如果需要双向同步,更适合的工具是 unison。unison 使用 OCaml 语言开发,基于 rsync 算法对两端文件进行比较,将它们更新到一致的状态(最新的、不冲突的版本)。unison 可借助 socket、ssh 等连接方式,并支持多种操作系统。与 rsync 类似,我们需要向 web 主机上传一个 unison 二进制文件。官方只提供了最新版的源代码,需要自行下载到本地编译(事先安装 OCaml 编译器及 etags 工具)。服务端部署之后,客户端配置文件([config_name].prf)为:

root = /[local_home_dir]/html/

root = ssh://[username]@[hostname]//[remote_home_dir]/html/

servercmd = /[remote_home_dir]/bin/unison

在客户端执行 ./unison [config_name] 即可完成双向同步。注意 unison 要求服务端和客户端的主次版本号一致。

如果客户端为 Windows,同样可以使用来自 cwRsync 的 ssh 命令。如果嫌这个 ssh 外加 cygwin 库的体积太大(~5M),另一种替代的方案是使用 Putty 提供的 Plink 工具。这是一个小巧的 Win32 ssh 客户端(276K),由于运行参数与 OpenSSH 不同,因此需要写一个批处理文件(ssh.bat)来封装:

@Plink.exe [hostname] -l [username] -pw [password] “/[remote_home_dir]/bin/unison -server”

并在 unicon 配置文件中指定 ssh 命令:

sshcmd = ssh.bat

此时运行 unicon,即可使用 Plink 进行 ssh 连接。

无论使用 OpenSSH 的 ssh 还是 Putty 的 Plink,都可以借助公钥认证方式避免密码的输入。这样有利于定时备份和同步的自动化执行。具体方法不再赘述。

rsync的一些更安全的用法

By admin, 2010年01月24日 7:13 上午

总的来说,开在873端口之后,只要加上验证口令,安全性就有保障了,但毕竟多开一个端口,而且rsync的密码是明文方式存储的,相对来说,还是有被监听的可能。根据不同的情况采用下述不同方案,相对来说,安全性更高一些

1。如果只是本机备份,不需要启动darmon,直接用
引用
/usr/bin/rsync -vzrtopglq –size-only –progress –delete /data/htdocs  /backup
2。如果只是内网中的机器互备,可以让rsync只监听在内网的ip上
启动daemon的时候,用参数 –address 可以让rsync只监听在内网的192.168.0.10这个ip上
引用
rsync –daemon –address 192.168.0.10
3。通过公网备份的话,可以将rsync监听在非873端口,增加安全性
启动daemon的时候,用参数 –port 可以让rsync监听在 非873端口
引用
rsync –daemon –port 1873
4。如果还觉得不够安全,可以不启用daemon,通过ssh做备份,更安全和方便一些
在客户端是用命令
引用
/usr/bin/rsync -vzrtopgl –size-only –progress –delete -e ssh root@www.admin99.net:/usr/local/httpd/htdocs/ /backup/admin99

即可以通过ssh端口来做备份,rsync会调用远端的rsync命令来处理相关操作

如果远端机器的ssh开在非22端口的话,可以通过 -p参数来指定ssh的端口
引用
/usr/bin/rsync -vzrtopgl –size-only –progress –delete -e ‘ssh -p1089′  root@www.admin99.net:/usr/local/httpd/htdocs/ /backup/admin99

如果不想每次备份都手工输入ssh的密码的话,可以参考这里使用scp、ssh等不用输入密码

[转帖] Linux rsync命令实现备份

By admin, 2010年01月23日 5:59 下午

实现功能:当用户在本地客户端某目录内建立、修改、删除目录或文件、修改目录或文件的属性,只要执行相同的shell脚本,rsync就会自动找出有改动或删除的数据,将其传送到服务器上,使服务器端某目录内的数据跟本地客户端某目录内的数据保持一致。

一、通过rsh或ssh命令

在没有建立rsync服务器的情况下,我们可以利用rsync命令直接进行快速的差异备份:

命令格式:

#rsync [option] 源路径 目标路径

其中:

[option]:

a:使用archive模式,等于-rlptgoD,即保持原有的文件权限

z:表示传输时压缩数据

v:显示到屏幕中

e:使用远程shell程序(可以使用rsh或ssh)

–delete:精确保存副本,源主机删除的文件,目标主机也会同步删除

–include=PATTERN:不排除符合PATTERN的文件或目录

–exclude=PATTERN:排除所有符合PATTERN的文件或目录

–password-file:指定用于rsync服务器的用户验证密码

源路径和目标路径可以使用如下格式:

rsync://[USER@]Host[:Port]/Path <–rsync服务器路径

[USER@]Host::Path <–rsync服务器的另一种表示形式

[USER@]Host:Path <–远程路径

LocalPath <–本地路径

1、同步客户端/home/test/abc目录中的文件到服务器端的/opt/htdocs目录:

/usr/bin/rsync -azv –delete /home/test/abc -e ssh www@192.168.1.200:/opt/htdocs/ //注意这里的区别/home/test/abc/ 和/home/test/abc

2、同步rsync服务器/opt/htdocs/目录中的文件到本地的/home/test/abc/:

/usr/bin/rsync -azv –delete rsync://linuxing@192.168.1.200/opt/htdocs /home/test/abc/

二、建立rsync服务器

当服务器没有开通ssh,或备份方没有ssh权限的时候,我们可以通过建立rsync服务器,进行匿名的数据同步。

1、服务端

主配置文件:

#vi /etc/rsyncd.conf

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

[test] #rsync区段的设定名称

path = /var/www/html/test #需要同步的数据存放路径

comment = test folder #注释

uid = apache #采用什么身份进行文件读取

gid = apache #同上,必须是有读取path权限的用户、组

ignore errors #忽略错误

read only = yes #只读

list = no #不能列表

auth users = linuxing #连接rsync服务的帐号

secrets file = /etc/rsyncd.secrets #指定存放帐号密码的位置

帐号密码文件:

#vi /etc/rsyncd.secrets

#格式:帐号:密码 (每行一组,帐号和密码用:号分开)

linuxing:backup

保存后,需要保证用户是root,权限是600

#chown root:root /etc/rsyncd.secrets

#chmod 600 /etc/rsyncd.secrets

启动服务:

#rsync –daemon

保证开机自动启动:

修改/etc/xinetd.d/rsync文件,把其中的disable=yes改为disable=no

#sed -i -e “/disable/{ s/yes/no/ }” /etc/xinetd.d/rsync

#service xinetd.d restart

2、客户端

使用用法一中涉及到rsync://的方法即可。

如果rsync服务器需要密码验证,可以增加–password-file参数:

#rsync -azv –delete rsync://linuxing@192.168.1.100/test /var/www/html –password-file=/etc/test

#vi /etc/test

#指定访问密码

bakcup

#chmod 600 /etc/test

3、定时

另外,由于rsync客户端没有定时功能,我们可以通过在crontab中增加计划任务实现定时的同步,如:(不要使用-v参数,防止刷屏)

#crontab -e

0 22 * * 1-5 /usr/bin/rsync -az –delete rsync://linuxing@192.168.1.100/test /var/www/html –password-file=/etc/test

#指定星期一到五,每晚十点整进行同步

三、总结

使用rsync的优点:可通过ssh进行网络加密传输,也可以利用ssh客户端密钥建立信任关系。当在两台计算机之间保持大型、复杂目录结构的同步时候,比tar或wget等方式都要快。而且可以做到精确同步。

rsync更换端口

By admin, 2010年01月23日 5:46 下午

一般使用默认端口的话, 在服务端的启动命令为:
/usr/bin/rsync –address=192.168.1.23 –daemon
 
如果在客户端需要换另外的端口侦听, 则使用
/usr/bin/rsync –address=172.18.16.89 –port=8093 –daemon
 
客户端命令:
/usr/bin/rsync -vzrc –progress –bwlimit=300 /usr/local/tomcat/webapps/.gif 172.18.16.89::appLogo/
 
rsync: failed to connect to 172.18.16.89: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(107) [sender=2.6.8] 

此时在客户端也必须指定端口, 不然会报错。
改为/usr/bin/rsync -vzrc –port=8093 –progress –bwlimit=300 /usr/local/tomcat/webapps/.gif 172.18.16.89::appLogo/
就OK

用rsync从Linux到Windows远程备份

By admin, 2010年01月23日 5:43 下午

rsync是Linux系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。rsync的最新版本可以从http://rsync.samba.org/rsync/获得。它的特性如下: 

1、可以镜像保存整个目录树和文件系统。 

2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。 

3、无须特殊权限即可安装。 

4、优化的流程,文件传输效率高。 

5、可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

 本文介绍了如何使用rsync服务从Linux到Windows进行远程备份。 

一、服务器端配置 

1.安装rsync包 

# rpm -q rsync 

rsync-2.6.3-1 

我们需要配置rsync,打开配置文件/etc/xinetd.d/rsyncd.conf(如果没有请创建它),修改相应的配置项:

disable = yes 修改为  disable = no

2.rsync只使用一个配置文件就是/etc/rsyncd.conf 

# vi /etc/rsyncd.conf 

内容如下: 

uid = nobody                     # 备份以什么身份进行,用户ID 

gid = nobody                     # 备份以什么身份进行,组ID 

#注意这个用户ID和组ID,如果要方便的话,可以设置成root,这样rsync几乎就可#以读取任何文件和目录了,但是也带来安全隐患。建议设置成只能读取你要备

 #份的目录和文件即可。

 max connections = 4               # 最大连接数为4

 [www]                       # 指定认证的备份模块名

 path = /www                   # 需要备份的目录

 comment = BACKUP WWW      # 注释

 ignore errors                   # 忽略一些无关的IO错误

 read only = yes                 # 设置为只读

 list = no                       # 不允许列文件

 auth users = wwwuser            # 认证的用户名,如果没有这行,则表明是匿名

 hosts allow=220.122.133.31  #允许连接服务器的主机IP地址

 secrets file = /etc/wwwuser.pass     # 认证文件名,用来存放密码

 这一段我们修改完成。

 注意:如果同时还需要备份其它目录的话,可以直接在配置文件的后面继续增加配置内容,例如:

 [database]

 path = /var/lib/mysql

 ……

 这样就可以同时备份多个目录了。

实例代码如下:

uid = root

gid = root

use chroot = yes

max connections = 4

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

[data0_website]

path = /home/sites/compshop

auth users = root

uid = root

gid = root

secrets file = /etc/rsyncd.secrets

read only = no

3.修改配置文件属性

 #chmod 600 /etc/rsyncd.conf

 4.修改密码文件

 #vi /etc/rsyncd.secrets

 内容如下:

 root:lingtong

 5.修改密码文件属性

 #chmod 600 /etc/rsyncd.secrets

 4.启动服务

 #/usr/bin/rsync –daemon

 5.加入开机启动

 #echo “/usr/bin/rsync –daemon” >> /etc/rc.local

 6.检查rsync时候启动

 #ps -ef | grep rsync

 二、配置客户端

 同步Rsync Client软件下载cwRsync_Client_2.0.10_Installer.zip

 为了在Windows环境使用rsync工具,我们需要去下载cwRsync工具,这是一个rsync for windows的版本。

 下载安装完成之后的目录结构类似下图所示:

 

 然后在安装了同步Rsync Server和Rsync Client软件的windows服务器上设置环境变量:

 

 把目录C:\Program Files\cwRsyncServer\bin填加到当前用户的path里。

 现在我们可以在Windows环境下运行rsync工具了,举例使用下面的命令连接服务器并开始备份目录和文件:

 rsync -vzrtopgl –progress –port=8081 –delete root@192.168.1.1::backup /cygdrive/d/bak

 放在d:\bak目录下

 应该可以看到:

 password:

 要求输入密码的提示,正确输入密码后就应该看到开始备份了。当然,也有可能出现类似下面的错误信息:

 

 引起这种错误有几种可能性,一是你没有输入正确的用户名或密码,二是你的服务器端存储密码的文件没有正确的权限,也就是你的密码文件不是类似这样子的权限:-rw——-  1 root   root

 在备份完成之后,我们可以看到类似下图所示的状态:

 

如果要设置定时备份,只需要在Rsync Client端写一个包含rsync命令的批处理程序rsync_test.bat

加入如下代码: rsync -vzrtopgl –progress –port=8081 –delete root@192.168.1.1::backup /cygdrive/d/bak

加入任务计划就可以定时备份了。

Panorama Theme by Themocracy