Neil Developer

rsync 远程同步文件

2014-02-23
Neil

 

rsync 有两种工作方式,  这里用的是“方式”这个词,而不是“模式”。注意区分。

 

第一种方式是 服务器--客户端方式。

      在这种方式下, 服务端启动daemon 守护进程, 监听在端口 873,  并配置需要同步的模块。 然后客户端直接链接到873端口,通过认证,并同步。

其中,同步用的账号和密码都是rsync专用的,在rsync配置文件中独立配置。 于系统账号无关。

服务端运行rsync进程在daemon模式下, 客户端是普通的rsync进程。

这种模式下,客户端只能同步服务端事先配置的模块(目录)。 不能访问其他路径。

服务端配置方法参考:

rsync配置详细版

用rsync对网站进行镜像备份

第二种方式,  通过ssh链接。

        这种方式下, 无需事先配置远程服务端。

本机 rsync 进程 直接通过 ssh 通道连接到远程, 并在远程ssh通道执行命令: rsync –******

 

本地rsync进程和远程rsync进程 通过自己的标准输入和标准输出 互相通信。  具体的说就是,本地进程监听ssh通道的远程回显当做输入, 把自己的的输出通过ssh通道发送给远程。 而远程的rsync进程就一样, 也会监听ssh通道的输入,当做自己的输入,然后把自己的输出写入到ssh通道。

于是, 远程rsync进程和本地rsync进程就通过这种方式同步文件。

这种情况,无需事先配置远程服务端, 只要你有ssh权限登录,就能同步。

同步的路径无限制。  当然只能访问你的ssh账号所能访问的目录。 如果你是root那就是无限制了。

 

这两种工作方式下,只是传输的通道不一样,第一种是直接走socket通道。  第二种是走的ssh通道。

安全性显而易见。 

两种方式下,rsync都使用自有协议进行同步,所以可以携带的参数都是没有区别的。

具体实例:

rsync 的一般形式:

   2:  rsync  -options   SRC    DEST

当通过ssh链接时, 有时需要指定ssh端口, 请使用这个方式:

   1:  rsync  -options  -e  "ssh -p 10000"     SRC     DEST

 

(注意,是否使用ssh通道,与上面这个参数没有必然联系。我这里指定了10000端口)

 

我们以从远程 向 本地拷贝为例,

这个时候, SRC  应该是远程地址.

其形式应该是:

如果远程是daemon模式:

MODE是远程daemon事先配置好的 模块名字。这里只能使用已经配好的模块名字,不能使用路径。

注意HOST于MODE之间有两个冒号。  这是rsync用于区分模式的唯一方法。

     例子,拷贝远程模块到本地:

   1:   rsync -vzrtopg --progress  --delete   user1@192.168.168.52::WEB   /tmp/

      把远程的 WEB模块,拷贝到本地的tmp目录。

 

或者是:

直接使用ssh模式:

   1:  USER@HOST:Folder  

这里,后面跟的直接是Folder的完整路径。 当然是USER所能访问的地方。

注意这里HOST和Folder之间用的是一个冒号, rsync由此判断使用ssh通道。而不是直接连接远端的873端口。

     例子:

   1:   rsync -vzrtopg --progress --delete root@192.168.168.52:/home/wwwroot/    /tmp/

     这里是使用root用户登录远程服务器, 并把远程的 /home/wwwroot/ 目录同步到本地的 tmp 目录。注意与前一种的区别, 只有一个冒号。  这里会提示输入远程root的密码,如果已经配置了public key ssh 登录远程机器,就无需输入密码了。

 

常用rsync命令参数:

   1:  rsync -vzacu  /home/wwwroot   root@198.***.***.***:/home/   --exclude  "wwwroot/index"   -e "ssh -p 22"

这是一个通过ssh通道从本地推送到远程的例子。 把本地的/home/wwwroot 推送到远程的/home下面。

参数说明,

-z 表示传输过程压缩

-a 表示采用归档模式, 拷贝文件时,保留文件的属主,用户组,权限等等信息。

-c 表示校验文件checksum

-u 表示update,只传送更新的文件。rsync会比较文件的修改时间。只有较新的文件才会被同步。

 

参考:

rsync

How Rsync Works

 

Rsync命令参数详解 - 技术文档 - 系统管理 Linux时代 - 开源、自由、共享 - 中国最大的Linux技术社区


Comments

Content