检查rsycn是否安装
检查方法:rpm -qa rsync
出现rsync 包名就是安装了
安装rsycn
rsync的安装可以使用yum直接安装:yum install rsync
也可以尝试手动从官方软件源中下载 rsync 软件包,并手动安装它
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/rsync-3.1.2-10.el7.x86_64.rpm
sudo yum install rsync-3.1.2-10.el7.x86_64.rpm
rsycn的服务端/文件接收端配置
1、先创建备份目录
mkdir /data/xsbak
2、添加配置文件rsyncd.conf
vi /etc/rsyncd.conf
#以下是全局配置
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/lock/rsyncd
[xsbak] #模块名,在源服务器指定这个名字
comment = sync rsync/home #描述信息
path = /data/xsbak #备份目录
use chroot=yes #使用chroot,用root权限
read only = no #设置本地备份目录为读写权限
uid=root #rsync 进程运行时的用户 ID,而 gid 表示 rsync 进程运行时的组 ID
gid=root
max connections=10 #客户端最大连接数
auth users = root #指定数据同步用户
secrets file = /etc/rsyncd.pass #指定数据同步用户信息文件,里面是用户名和密码
hosts allow=39.103.190.34 #允许连接的客户端
ignore errors = yes #忽略出现I/O错误
timeout = 600
3、 创建认证文件
vi /etc/rsyncd.pass
##代码
root:XXX #格式是用户名:密码
加权限:chmod 600 /etc/rsyncd.pass
主要有权限读这个文件,否则会报错
ERROR: password file must not be other-accessible
rsync error: syntax or usage error (code 1) at authenticate.c(175) [Receiver=3.0.9]
4、修改/etc/xinetd.d/rsync文件,disable 改为 no
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
5、服务端需要开启rsyncd服务,启动服务端
rsync --daemon --config=/etc/rsyncd.conf
注:重启时记得删除rsyncd.pid:rm -rf /var/run/rsyncd.pid
6、开放端口
rsync默认端口是873,防火墙要放开该端口,否则客户端会无法连接的
#开放873端口
sudo firewall-cmd --zone=public --add-port=873/tcp --permanent
#重启防火墙服务
firewall-cmd --reload
systemctl restart firewalld 或者sudo systemctl restart firewalld.service
rsycn的客户端/文件发送端配置
1、客户端配置简单 只需要配置密码既可
vi /etc/rsync_client.pwd
XXX #只需要填写rsync服务的密码,和服务端的密码一致
#属主要有权限读这个文件,否则会报没权限
chmod 600 /etc/rsync_client.pwd
2、客户端同步测试
将客户端39.103.190.34的/home/xsbak下的文件同步到 81.70.251.43远程服务器服务端 xsbak 目录下面,命令如下:
rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd /home/xsbak root@81.70.251.43::xsbak
注:xsbak就是服务端/etc/rsyncd.conf里的配置
参考链接:
https://blog.csdn.net/gjwgjw1111/article/details/103515031
https://blog.csdn.net/jc_hook/article/details/126351788
如果备份没有成功,可能的原因如下:
1、密码错误:请检查 /etc/rsync_client.pwd 文件中指定的密码是否正确,并确保它与远程 rsync 服务器上相应模块的密码匹配。
2、模块名称错误:请确保使用正确的模块名称连接到远程 rsync 服务器。模块名称应该与 rsync 服务器配置文件(通常为 /etc/rsyncd.conf)中指定的模块名称相同。
3、认证模式错误:rsync 服务器支持多种不同的认证模式,包括密码认证、SSH 认证和密钥认证等。请确保客户端使用的认证模式与服务器端允许的认证模式相同。
4、防火墙限制:如果客户端和服务器之间存在防火墙,请确保已打开 rsync 端口(默认为873端口)。
检查防火墙设置:
确保客户端和服务器之间没有防火墙阻止 rsync 通信。可以使用 telnet 命令测试 rsync 端口是否已打开:telnet 具体IP 873
如果bash: telnet: 未找到命令…,如果您的系统上没有安装 telnet 命令,则您可以尝试使用 nc 命令进行测试,该命令在某些系统上可能被称为 netcat。
以下是使用 nc 命令测试 rsync 端口的示例命令:
nc -zv 具体IP 873
如果输出中包含以下内容,则说明 rsync 端口已打开:
Connection to IP 873 port [tcp/rsync] succeeded!
如果没有上述succeeded描述,原因是防火墙阻止通讯的话,解决办法如下:
使用 SSH 连接。如果 rsync 无法直接通信,您可以考虑使用 SSH 进行连接。在客户端和服务器之间建立 SSH 连接后,您可以使用 rsync over SSH 的方式进行数据传输。
这种方式需要在客户端和服务器上安装 SSH 服务,确保是否安装:which sshd
centos安装:sudo yum install openssh-server
启动 SSH 服务:sudo systemctl start sshd
并且需要在 rsync 命令中添加 -e ssh 参数来指定使用 SSH 连接。
rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd -e ssh 发送端需要备份的文件的路径 接收端用户名@接收端IP:接收端路径
但是我的会报错:
The --password-file option may only be used when accessing an rsync daemon.
rsync error: syntax or usage error (code 1) at main.c(1383) [sender=3.1.2]
该报错意味着您使用了 --password-file 选项,但是该选项只能在连接 rsync daemon 时使用,不能用于连接远程主机。
如果您想要在 rsync 命令中指定远程主机的密码,可以使用 sshpass 工具。 sshpass 工具可以通过命令行指定密码,从而在 rsync 命令中使用。
1、安装sshpass :yum install sshpass
2、备份:sshpass -p '接收端服务器密码' rsync -auvrtzopgP --progress 发送端文件夹路径 接收端用户名@接收端IP:接收端文件夹路径
如果报错:Host key verification failed. rsync error: unexplained error (code 255) at rsync.c(638) [sender=3.1.2]
这个错误通常是由于 SSH 主机密钥认证失败引起的。在第一次使用 SSH 连接时,客户端会记录下远程主机的公钥,并且在以后的连接中,会使用这个公钥来验证远程主机的身份。
3、手动连接一次目标主机并将其公钥添加到 known_hosts 文件中。可以使用 ssh 命令手动连接一次目标主机:ssh 接收端用户名@接收端IP
,然后在输入连接密码
以后如果公钥发生了变化,也会出现主机密钥认证失败的错误。则需要手动更新发送端的 known_hosts 文件。可以使用 ssh-keygen 命令来删除本地 known_hosts 文件中与目标主机相关的条目:ssh-keygen -R "接收端IP"
4、然后手动连接完一次以后,就可以用备份的命令了
rsync只是一次性同步,如果需要实时同步可以只用cron调度
参考链接:linux下cron周期性调度
rsync常见的报错:
http://t.zoukankan.com/zoe233-p-11972699.html
https://blog.51cto.com/gongxiaoyi/1825454
https://blog.csdn.net/qq_38483583/article/details/123608484
直接用命令行将一个服务器上的文件或者文件夹复制到另一台服务器上:
这种需要连接另外一个服务器,需要输入服务器的登录密码
scp -r /home/test1 zhidao@192.168.0.1:/home/test2