跳至内容

前言

rsync 简述 我们知道,rsync 是一个增量同步的工具,每次执行 rsync 命令,就可以同步一次数据,但并不能实现实时同步,如何做呢?

借助 inotify-tools 即可实现单向的实时同步。既然是实时数据同步,那么前提条件就是免密登录。

不论是 rsync 协议还是 SSH 协议,都可以实现免密登录。

SSH协议免密登录

首先,在客户端生成公钥和私钥,输入命令后一路回车,密钥对保存在/root/.ssh/目录下。

[root@fedora ~]# ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256: TDA3tWeRhQIqzTORLaqy18nKnQOFNDhoAsNqRLo1TMg root@fedora
The key's randomart image is:
+---[RSA 2048]----+
|O+. +o+o. .+. |
|BEo oo*....o. |
|*o+o..*.. ..o |
|.+..o. = o |
|o o S |
|. o |
| o +. |
|....=. |
| .o.o. |
+----[SHA256]-----+

然后,使用 scp 命令将公钥文件上传到服务器。例如,我将这个公钥上传到用户 testrsync

[root@fedora ~]# scp -P 22 /root/.ssh/id_rsa.pub root@192.168.100.4:/home/testrsync/
[root@Rocky ~]# cat /home/testrsync/id_rsa.pub >> /home/testrsync/.ssh/authorized_keys

尝试免密登录,成功!

[root@fedora ~]# ssh -p 22 testrsync@192.168.100.4
Last login: Tue Nov 2 21:42:44 2021 from 192.168.100.5
[testrsync@Rocky ~]$

技巧

需要将服务器配置文件 /etc/ssh/sshd_config 打开PubkeyAuthentication yes

rsync协议免密登录

在客户端,rsync 服务为系统准备了一个环境变量 RSYNC_PASSWORD,默认是空,如图

[root@fedora ~]# echo "$RSYNC_PASSWORD"

[root@fedora ~]#

如果你想实现免密登录,只需要给这个变量赋值即可,赋值为之前设置的虚拟用户的密码li,并且将此变量声明为全局变量。

[root@Rocky ~]# cat /etc/rsyncd_users.db
li:13579
[root@fedora ~]# export RSYNC_PASSWORD=13579

尝试一下,成功!这里没有出现新文件,所以未显示传输文件列表。

[root@fedora ~]# rsync -avz li@192.168.100.4::share /root/
receiving incremental file list
./

sent 30 bytes received 193 bytes 148.67 bytes/sec
total size is 883 speedup is 3.96

技巧

你可以将此变量写入 /etc/profile,实现永久生效。内容如下:export RSYNC_PASSWORD=13579

作者:李天赐

贡献者:Steven Spencer, Ganna Zhyrnova