1、rsync 通过 ssh 方式同步
现在打开两个PuTTY窗口,001机器的见下图,
02机器见下图,
两个的IP地址是不一样的,001机器的IP地址是 192.168.218.128,02机器的IP地址是 192.168.218.130。
现在在001机器上操作,见下图,
显示未找到命令,默认系统中是没有rsync命令,现在需要在02机器上安装rsync命令,输入命令 yum install -y rsync,回车,见下图,
接着回到001机器,重新操作,通过ssh同步,输入命令 rsync -av /etc/passwd 192.168.218.130:/tmp/lys.txt ,回车,见下图,
可以看到文件同步的过程。接着来查看一下文件,输入命令 cat /tmp/lys.txt 回车,见下图,
也可以反过来操作,输入命令 rsync -avP 192.168.218.130:/tmp/lys.txt /tmp/123.txt,回车,见下图,
以上操作叫拉文件,再上面的操作叫推文件。两个操作都需要输入密码,并且都知道端口是 22,如果不知道对方的端口的话,就需要指定端口,加上-e选项,输入命令 rsync -avP -e "ssh -p 22" /etc/passwd 192.168.218.130:/tmp/lys.txt ,回车,见下图,
指定 22 端口,就会连上对方的 22 端口。注意 -e 后面的“ssh -p 22”是一个命令,这个命令可以单独操作的 ,输入命令 ssh -p 22 192.168.218.130,回车,见下图,
可以发现,输入密码之后,就连接上02机器了,接着按住 ctrl+d 登出。
2、rsync 通过服务同步
这边需要先开启服务,编辑配置文件,输入命令 vi /etc/rsyncd.conf,回车,见下图,
默认是有内容的,但前面都有一个#号,被注释掉了。现在直接另起一行,将下面的内容复制粘贴上去,再保存并退出即可。
port=873
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
address=192.168.218.128
[test]
path=/tmp/rsync
use chroot=true
max connections=4
read only=no
list=true
uid=root
gid=root
auth user=test
secrets file=/etc/rsyncd.passwd
hosts allow=192.168.218.130
见下图,
稍后再解释上面内容的含义,先接着往下操作,启动服务,输入命令 rsync--daemon,回车,见下图,
接着使用命令 ps aux |grep rsync,来检测一下服务是否启动,见下图,
可以看到服务启动了,接着使用命令 netstat -lntp 查看服务端口,如上图第三个红色框框内容所示。
接着创建文件 /tmp/rsync,并授权 777,方便我们测试,见下图,
然后先在02机器上,同步一个文件,输入命令 rsync -avP /tmp/lys.txt 192.168.218.128::test/lys-02.txt,回车,见下图,
出现报错,先检测网络,发现没有问题,接着检查端口,未找到命令,输入命令 yum install -y telnet,回车,安装命令,见下图,
telnet 192.168.218.128 873,命令是检测端口是否接通,见下图,
结果显示,端口是不通的,这时候需要检查一下是否是 iptables 的问题,输入命令 iptables -v
L,回车,见下图,
可以看出,就是 iptables 的问题,要把 firewalld 服务停止,见下图,
可以看到,iptables 上的规则没有了,001机器上也要检查一下,见下图,
001机器上的 firewalld 服务也关闭掉了。然后回到02机器,输入命令 telnet 192.168.218.128 873,回车,见下图,
这样子就是没问题的,退出输入 telnet> quit 或是直接回车,就可以退出来。
接着运行刚才的命令 rsync -avP /tmp/lys.txt 192.168.218.128::test/lys-02.txt,回车,见下图,
这样显示就是成功了。命令中含有两个冒号 :: 的,就是使用 rsyncd.conf 。接着在001机器上检查一下,见下图,
可以看到 lys-02.txt 这个文件,说明同步成功了。
回到02机器上,再把这个文件拉回来,也是可以的,见下图,
接下来,输入命令 cat /etc/rsyncd.conf,回车,查看配置文件,见下图,
上图红色框框的内容,具体含义见下图,
port 默认端口是873,也可以更改,直接在配置文件里面更改即可。
现在来更改一下端口为8730,先进入配置文件,输入命令 vim /etc/rsyncd.conf,回车,见下图,
更改上面红色框框的内容,保存并退出。接着往下操作,
更改配置文件之后,还要重新启动服务,才可以生效,然后看到端口更改成功了。
接着去02机器,同步目录,见下图,
一开始同步的时候,报错了,因为8730端口没有开放。指定端口后,才可以同步目录。
日志文件,输入命令 cat /var/log/rsync.log,回车见入查看,见下图,
“use chroot” 默认为true,如果是true,同步的文件中如果有软连接,则会有问题,无法实现同步。这时候更改配置文件里的 use chroot 为 false 的话,软链接同步就可以实现了。
现在看看 list 为 ture 的时候,输入命令 rsync --port=8730 192.168.218.128::,回车,见下图,
后面不跟模块名的时候,会自动列出模块名。然后更改 list 为 false,输入命令 vi /etc/rsyncd.conf,进入下图,
保存并退出,再来看一下刚才的命令,见下图,
list 改为 false 的时候,就不会有结果出现。
接着来看看 uid 和 gid,在001机器上,原本设置的全部是 root,具体操作见下图,
查看目录 /tmp/rsync/ 下的文件权限都是 root,先把这些文件都删除掉,再重新定义 uid 和 gid,通过命令 vim /etc/rsyncd.conf,见下图,
nobody 是权限很小的一个用户。
现在回到02机器上同步一下,见下图,
可以看到结果的第三行,显示 Operation not permitted,意思为权限不够,所以不能完成同步。所以还要把001机器上的 uid 和 gid 改为 root,这边不显示过程了。然后再回到02机器上同步操作,就可以执行了,见下图,
传输过程指定用户名 auth users 和密码文件 secrets file,输入命令 vim /etc/rsyncd.passwd,回车,见下图,
输入密码,格式见上图。保存并退出,还要更改文件的权限为600,见下图,
接着回到02机器,同步目录的时候就需要输入用户名和密码了。还有一种方法,在02机器上保存密码文件,传输的时候就不必输密码了,具体操作见下图,输入命令 vi /etc/rsync_pass.txt,回车,
这边和001机器上的操作不一样,这边直接输入密码,保存并退出即可。文件的权限也要改为600,接着同步服务的时候,输入命令 rsync -avP /tmp/test/ --port=8730 --password-file=/etc/rsync_pass.txt test@192.168.218.128::test/,回车,见下图,
这样同步的时候就不用输密码了。