两种模式
下文中主要说的是rsync-daemon
认证模式。
SSH认证
推荐场景:服务器之间同步
特点:
- 可以同步到任意目录
- 服务端不需要开启服务
- 不需要配置配置文件
- 使用系统用户
rsync在ssh认证方式下,可通过系统用户进行认证,即在rsync上通过ssh隧道进行传输,类似于scp工具。
此时同步操作不在局限于rsync中定义的同步文件夹。
注意:
ssh认证方式,不需要服务器和客户端配置rsync配置文件
只需要双方都安装rsync服务,并且也不需要双方启动rsync。
示例
若rsync服务端SSH为标准端口,此时rsync使用方式如下:
1 | rsync -avz /cygdrive/d/Pic/ root@192.168.7.101:/root/ |
若rsync服务端SSH为非标准端口,可通过rsync的-e参数进行端口指定。
使用方式如下:
1 | rsync -avz /cygdrive/d/Pic/ -e 'ssh -p2222' root@192.168.7.101:/root/ |
rsync-daemon 认证
特点:
- 只能同步配置文件中设置的目录
- 服务端必须开启服务
- 必须配置配置文件
- 可以加载密码文件,跳过输入密码
- 使用虚拟用户
rsync在rsync-daemon认证方式下,默认监听TCP的873端口。
rsync-daemon认证方式是rsync的主要认证方式,这个也是我们经常使用的认证方式。
并且也只有在此种模式下,rsync才可以把密码写入到一个文件中。
示例
1 | rsync -avzP --password-file=/cygdrive/d/auth.txt /cygdrive/d/Pic/ zj@192.168.7.101::zjhome |
注意:
rsync-daemon认证方式,需要服务器和客户端都安装rsync服务
并且只需要rsync服务器端启动rsync,同时配置rsync配置文件。
服务端
安装
检查rsync 是否已经安装
1 | rpm -qa|grep rsync |
若已经安装,则使用rpm -e
命令卸载。
1 | rpm -e rsync |
安装rsync
1 | yum install rsync |
注意如果卸载再安装rsync,配置文件rsyncd.conf
也会重置。
daemon配置
rsync主要分为三个配置文件,分别是:
rsyncd.conf – 主配置文件
rsyncd.secrets – 密码文件
rsyncd.motd – 服务器欢迎文字
rsyncd.conf
配置文件
1 | vi /etc/rsyncd.conf |
配置如下
1 | # GLOBAL OPTIONS |
注:
auth users = zj
这是虚拟用户 系统上不需要添加。
rsyncd.secrets
用户密码配置文件
1 | vi /etc/rsyncd.secrets |
内容
1 | zj:qazwsx123 |
为了密码的安全性,我们必须把权限设为600
1 | chown root:root /etc/rsyncd.secrets |
rsyncd.motd
建立连接到服务器的客户端看到的欢迎信息
1 | vi /etc/rsyncd.motd |
如
1 | >>>Sync<<< |
防火墙设置
如果服务器上装有防火墙,需在服务器中设置iptables将837端口开放。
1 | iptables -A INPUT -p tcp --dport 873 -j ACCEPT |
启动rsync
启动rsync服务端(独立启动)
1 | rsync --daemon --config=/etc/rsyncd.conf |
默认路径就是etc/rsyncd.conf
所以配置路径可以省略
1 | rsync --daemon |
查看873端口是否起来
1 | netstat -an | grep 873 |
如果rsync启动成功的话可以看到873端口已经在监听了。
停止
1 | lsof -i:873 |
服务的形式
启动
1 | systemctl start rsyncd |
重启
1 | systemctl restart rsyncd |
状态
1 | systemctl status rsyncd |
停止
1 | systemctl stop rsyncd |
开机启动
使用YUM安装
使用YUM安装后会自动在下面的位置添加服务,不需要自己再添加服务。
1 | /usr/lib/systemd/system/rsyncd.service |
开机自启
1 | systemctl enable rsyncd |
启动
1 | systemctl start rsyncd |
状态
1 | systemctl status rsyncd |
查看所有服务
1 | systemctl list-unit-files --state=enabled | grep service |
查看所有服务
1 | systemctl list-unit-files --state=enabled | grep rsyncd |
使用系统自带
有些云服务器的rsync也会自带服务,我们可以先确认一下
1 | systemctl status rsyncd |
如果没有再自己按下面的步骤添加服务:
编写 rsync 的服务脚本在 /etc/init.d/
目录下新建一个脚本文件,
实际位置:
1 | /etc/rc.d/init.d/rsyncd |
例如 rsyncd
,内容如下:
1 |
|
这个脚本实现了启动、停止 rsync 守护进程的功能。
添加执行权限:
1 | chmod +x /etc/init.d/rsyncd |
开机启动:
首先,添加为系统服务
1 | chkconfig --add rsyncd |
开机自启动
1 | chkconfig rsyncd on |
这会在开机时由 rc.local 自动调用 rsyncd 启动脚本。
启动服务:
1 | service rsyncd start |
现在 rsync 服务应该已经设置为开机自动启动了。你可以通过 service rsyncd start/stop
来管理服务。
这样就可以实现在 CentOS 系统中配置 rsync 服务开机自启动。
客户端
下载
Windows客户端cwRsync
链接:https://pan.baidu.com/s/1RbPZ6RntpzF3dJ5HLKkRUQ
提取码:psvm
链接:https://pan.baidu.com/s/1UYohMerxywZ_1tYEUtA6Og
提取码:psvm
CwRsync已经集成了cygwin类库,因此安装的时候可以省去cygwin包。
下载chown.exe
放在客户端安装目录
注意
默认客户端上没有chown.exe这个命令,直接从cwrsync-server的安装路径里拷贝一个过来就可以用了。
设置环境变量
1 | D:\Program Files (x86)\cwRsync\bin |
注意上面的最好放在%SYSTEMROOT%\System32\OpenSSH\
后面
否则在使用ssh
命令的时候查找的证书不是C:\Users\Administrator\.ssh
同步方向
Windows下使用cwRsync
的时候所有路径前面要添加上/cygdrive
。
Server => Local
1 | rsync -vzrtopg --progress --password-file=/cygdrive/d/auth.txt --delete zj@192.168.7.101::zjhome /cygdrive/d/Pic/ |
Local => Server
1 | rsync -vzrtopg --progress --password-file=/cygdrive/d/auth.txt /cygdrive/d/Pic/ zj@192.168.7.101::zjhome |
增量同步
1 | rsync -avzP /cygdrive/d/Pic/ zj@192.168.7.101::zjhome |
配置本地密码文件
在D盘根目录添加文件auth.txt
,内容
1 | 123456 |
同步
1 | rsync -avzP --password-file=/cygdrive/d/auth.txt /cygdrive/d/Pic/ zj@192.168.7.101::zjhome |
镜像同步
1 | rsync -avzP --delete zj@192.167.7.101::zjhome /cygdrive/d/Pic/ |
我们引入一个 --delete
选项,表示服务器上的数据要与客户端完全一致,如果目录中有服务器上不存在的文件,则删除。
最终目的是让目录上的数据完全与服务器上保持一致;用的时候要小心点,最好不要把已经有重要数所据的目录,当做本地更新目录,否则会把你的数据全部删除;
问题排查
1 | tail /var/log/rsync.log |
参数
1 | -a 参数,相当于-rlptgoD, |
定时同步
编辑crontab
1 | crontab -e |
加入如下代码:
1 | 10 0 * * * rsync -avzP --delete --password-file=/tmp/rsync.password zj@192.168.7.101::zjhome /cygdrive/d/Pic/ |
问题
问题1
Could not create directory ‘/home/Administrator/.ssh’
添加环境变量
1 | HOME=C:\Users\Administrator |
问题2
uid 4294967295 (-1) is impossible to set on
这是Windows和Linux文件所属用户不一致导致的,目前还没有解决方法,也就是说
目前还没用通过SSH认证来使用Rsync的方式。
目前在Windows上只能通过密码的形式。
如
1 | rsync -avz --password-file=/cygdrive/d/auth.txt ./%filename% zj@192.168.7.101::zjhome |
如上在D盘根目录添加了auth.txt
文件,里面写入密码。
另外 下面两种方式任选其一
1) 在服务器端的配置文件中添加:
1 | uid = 0 |
- 可以在命令行加参数 –no-super
问题3
password file must be owned by root when running as root
进入安装目录下D:\Program Files (x86)\cwRsync\bin
1 | chmod -c 600 /cygdrive/d/auth.txt |