Linux-工具-rsync

478 阅读3分钟

一、简介

rsync 是一个开源的文件同步工具,广泛用于Linux系统中进行数据备份或迁移。它支持本地文件系统之间的同步以及通过网络进行远程文件同步。rsync 的最大特点是能够高效地传输数据,只传送源文件和目标文件之间的差异部分,从而极大地节省了带宽和时间。
rsync支持两种方式运行:

  • 守护线程方式
  • SSH方式 这里忽略了rsync的安装,直接说明相关的配置和使用。

二、守护线程方式

守护线程的方式,区分为服务端和客户端的配置,其中服务端以守护线程的方式运行。
假设服务端机器IP为192.168.1.100,客户端机器IP为192.168.1.101。

2.1 服务端

使用root用户编辑/etc/rsyncd.conf,若安装了rsync,这个配置文件一般存在,若不存在,检查rsync是否正常安装。

uid = appuser
gid = app
# 若为 true,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下。
# 这样做的原因是实现额外的安全防护,但是缺点是需要 root 权限,
# 并且不能备份指向 path 外部的符号连接所指向的目录文件。
use chroot = yes
port = 873
max connections = 4
pid file = /var/run/rsync.pid
log file = /var/log/rysnc.log
lock file = /var/run/rysnc.lock
timeout = 900
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

[test]
path = /home/appuser/dest
comment = rsync demo
read only = false
write only = true
ignore errors
# 授权用户
auth users = rsync
# 内容格式为 用户名:明文密码,比如rsync:123456
secrets file = /etc/rsyncd/rsyncd.secrets
host allow = 192.168.1.101
host deny = *

若第一次启动,执行rsync --daemon;若rsync已经在运行了 先找到进程号ps -ef | grep rysnc,找到进程ID,kill掉;然后在删除rm /var/run/rysnc.pid文件;最后执行rsync --daemon

2.2 客户端

客户端执行如下命令,即可将文件夹的内容同步到服务端:

rsync -avz --deleting /home/appuser/source appuser@192.168.1.101::test --password-file=/etc/rsync.pass

avz的意思分别是:

  • a 递归、保留文件属性等等
  • v 展示同步信息
  • z 发送数据前先压缩
  • deleting 若有文件删除,则服务端的文件也删除。如果没有deleting参数,则只会新增和更新文件。
  • test 指的是服务端配置文件rsyncd.conf中的同步ID
  • passowrd-file 指向记录用户名和密码的文件,记录的是服务端的用户以及对应的密码,用户免密输入。文件内容仅为同步用户的密码,注意文件要有相应的权限,创建之后chmod 600 rysnc.pass。

三、SSH方式

3.1 建立主机信任

假设目标机器IP为192.168.1.100,源机器IP为192.168.1.101,都是用appuser用户进行操作。
传输文件从源机器到目标机器。
这里操作是建立目标机器信任源机器,从源机器上执行命令,无需输入目标机器的密码。
在源机器中执行如下命令:

ssh-keygen -t rsa

一直回车就可以,再执行如下命令,将公钥提供给目标机器。

ssh-copy -i ~.ssh/id_rsa.pub appuser@192.168.1.100

执行完如上操作之后,在源机器ssh目标机器就不需要密码了。

3.2 同步文件

rsync -avz -e 'ssh -p 22' --deleting /home/appuser/source appuser@192.168.1.101:/home/appuser/dest

注意到这里跟守护线程的方式的不同了吗,我就被坑在这里,最后只有一个冒号,并且连着目标机器的路径。其他的含义跟守护进程一样。

四、总结

守护线程的方式需要本地保存密码,一般企业不允许明文保存密码,因此ssh的方式更推荐。