day38:rsync服务应用、系统日记及screen工具

1、rsync:通过服务器/客户端CS模式,可以理解为:在远程主机上建立一个rsync的服务器,在服务器配置好rsync的各种应用配置,然后将本机作为rsync的一个客户端连接远程的rsysc服务器:

 需要先在服务端开启一个rsync服务,并且要监听的端口(默认873):

开启服务之前需要编辑/etc/rsyncd.conf文件,将服务添加进去,然后启动服务:“rsync --deamon”(服务名称),进行同步:

或者将配置文件写入到一个文件,使用“rsync  --configure”进行同步,配置完成后客户端可以通过制定端口和服务器通信:

配置案列:有A(服务端)和B(客户端)两台机器,首先编辑A机器的配置文件:

A机器的配置文件:   /etc/rsyncd.conf

[root@localhost_001 ~]# cat /etc/rsyncd.conf        #服务端rsync的主配置文件

port=873
#指定启动rsync服务的端口,默认问873端口:

log file=/var/log/rsync.log
#指定日记文件:

pid file=/var/run/rsyncd.pid
#指定pid文件,这个文件的作用涉及服务的启动和停止等进程操作:

address=192.168.133.130
#指定启动rsync的服务的IP,假如你的机器有多个IP,可以指定其中一个IP来启动rsync服务,如果不指定该参数,默认是在全部IP上启动:

[test]
#指定模块名,里面的内容自定义:

path=/tmp/rsync
#指定数据存放的路径:安全参数:

use chroot=true

#use chroot=true/flase 安全参数,在传输文件先chroot到path目录,实现安全防护:典型文件是软连接,如果设置为true,则加大L源文件无法复制,所以有软连接时建议设置为flase:
#设置为true:推拉文件时,只能限定在PATH这个目录下活动:
#设置为flase:不限定在PATH这个目录里:

max connections=4
#指定客户端连接的最大连接数,默认为0,则不限制:

read only=no
#read only=true|flase   如果为true,则不能上传文件到该模块指定目录下:推数据的时候使用:

list=true
#list=true|flase  当用户查询该服务上的模块,该模块会列出,设定true则列出,flase则隐藏:

uid=root
gid=root
#表示传输时文件以那个用户和组的身份来传输:

auth users=test                        
#指定传输要使用的用户名:如果注释掉则不生效,传输s时无需密码验证:

secrets file=/etc/rsyncd.passwd     
#指定密码文件,该参数同上面的参数结合使用,如果不指定,则不适用密码验证:
建议改密码权限设置为600,   文件格式   “用户名:密码”

hosts allow=192.168.149.130
表示允许那些客户端主机来连接本模块的服务,可以是IP或者网段,如果是多个,中间用空格隔开:

注释:当设置了auth users和secrets file后,客户端连接服务端需要输入密码,可有时候使用脚本时,输入密码太繁琐了:

方法:可以在客户端主机里/etc/rsync_pass.txt文件里写入密码,权限改为600,当再执行:不再需要输入密码:

rsync  -avP  /tmp/test/  --Port 1121 --password-file=/etc/rsync_pass.txt    test@192.168.149.129::test

--Port:配置文件里第一行可以自定义rsync端口后,当客户端连接时,则需要通过”--Port  1121“指定端口:

::tset:表示一个模块的名称,在配置文件里定义的:

2:启动rsync服务:      rsync   --daemon

[root@localhost_001 ~]# rsync --daemon            #启动服务
[root@localhost_001 ~]# ps aux |grep rsync        #查看相关进程:
root       1778  0.0  0.0 114696   536 ?        Ss   23:54   0:00 rsync --daemon
root       1782  0.0  0.0 112676   984 pts/0    S+   23:54   0:00 grep --color=auto rsync
[root@localhost_001 ~]# netstat -lnp |grep rsync     #查看rsync的端口号:
tcp        0      0 192.168.149.129:873     0.0.0.0:*               LISTEN      1778/rsync    

案列1:B机器(客户端)给A机器(服务端)上传文件:推文件:rsync   -avP   test/    192.168.149.129::test/

[root@localhost_002 ~]# rsync -avP test1/ 192.168.149.129::test/    #本地到远端主机
rsync: failed to connect to 192.168.149.129 (192.168.149.129): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]

#会提示错误路由不可以达:排除思路:   ping---->监听端口---->tenet Ip  873---->iptables

[root@localhost_002 ~]# systemctl stop iptables           #关闭防火墙
[root@localhost_002 ~]# rsync -avP test1/ 192.168.149.129::test/     #从本地到远端主机
sending incremental file list
./
123
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=7/9)
2112 -> 123
234
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=5/9)
4356
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=4/9)
567
              0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=3/9)
bac.txt -> /tmp/ipt.txt
sent 382 bytes  received 113 bytes  90.00 bytes/sec
total size is 15  speedup is 0.03
A机器查看文件:
[root@localhost_001 ~]# ls /tmp/test/
2112  234  4356  567  dir1  dir2

案列2:B机器(客户端)到A机器(服务端)去下载文件:拉文件:    rsync   -avP  192.168.148.129::test/     /root/

[root@localhost_002 ~]# rsync -avP 192.168.149.129::test/ /tmp/test22   #远端到本机
receiving incremental file list
created directory /tmp/test22
./
123
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=7/9)
2112 -> 123
234
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=5/9)
4356
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=4/9)
567
              0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=3/9)
bac.txt -> /tmp/ipt.txt
dir1/
dir2/

sent 121 bytes  received 378 bytes  998.00 bytes/sec
total size is 15  speedup is 0.03

注释有时rsync服务同步时无法同步:简单排查思路如下:

#会提示错误路由不可以达:排除思路:   ping---->监听端口---->tenet Ip  873---->iptables

[root@localhost_001 ~]# ping 192.168.149.130              #ping测试:
PING 192.168.149.130 (192.168.149.130) 56(84) bytes of data.
64 bytes from 192.168.149.130: icmp_seq=1 ttl=64 time=5.86 ms
64 bytes from 192.168.149.130: icmp_seq=2 ttl=64 time=0.224 ms
--- 192.168.149.130 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.224/3.046/5.868/2.822 ms
[root@localhost_001 ~]# ps aux |grep rsync               #查看其服务是否开启:
root       1778  0.0  0.0 114696   536 ?        Ss   8月14   0:00 rsync --daemon
root       2002  0.0  0.0 112676   984 pts/0    S+   01:41   0:00 grep --color=auto rsync
[root@localhost_001 ~]# netstat -lnp |grep rsync         #查看其端口:
tcp        0      0 192.168.149.129:873     0.0.0.0:*               LISTEN      1778/rsync          
[root@localhost_001 ~]# telnet 192.168.149.129 873       #telnet其端口:
Trying 192.168.149.129... 
Connected to 192.168.149.129.
Escape character is '^]'.
@RSYNCD: 31.0
^]
telnet> quit
Connection closed.
#先用crtl+]结束,在用quit退出telnet:
[root@localhost_001 ~]# iptables -nvL                     #查看其防火墙是否关闭:

案例3:修改A机器(服务端)的配置:use root=flase(不受PATH目录限制):      ture:只能限制的PATH的目录下:

我们以软连接为列,当其他目录有软连接在此目录下,则传输时是否会传输源文件,如下:

首先将use    chroot=true                   #  限定在PATH=/tmp/rsync/目录下:      传输时软连接会提示错误:

A机器(服务端配置):
[root@localhost_001 tmp]# ls -l /tmp/rsync/bac.txt 
lrwxrwxrwx   1 root root   12 8月  15 00:54 bac.txt -> /tmp/ipt.txt
#定义模块的目录下有一个ipt的软连接文件在这里:
[root@localhost_001 tmp]# vim /etc/rsyncd.conf 
use chroot=true        #限制在/tmp/test/目录下:

B机器上再次拷贝,看软连接源文件是否会被拷贝过来:
[root@localhost_002 ~]# rsync -avLP 192.168.149.129::test/  /tmp/test/
receiving incremental file list
symlink has no referent: "/bac.txt" (in test)
symlink has no referent: "/111/test1/bac.txt" (in test)
symlink has no referent: "/test1/bac.txt" (in test)
created directory /tmp/test
sent 352 bytes  received 1,291 bytes  252.77 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1650) [generator=3.1.2]            #提示报错:

#这样bac.txt会报错红色,提示文件不能用:

然后将use  chroot=false                #不限定PATH=/tmp/rsync/目录下:    软连接可以正常传输过去

A机器(服务端)
[root@localhost_001 tmp]# vim /etc/rsyncd.conf 
use chroot=false           #不想定在PATH目录:

B机器(客户端)
[root@localhost_002 ~]# rsync -avL 192.168.149.129::test/  /tmp/test/
receiving incremental file list
created directory /tmp/test
sent 409 bytes  received 2,949 bytes  6,716.00 bytes/sec
total size is 1,617  speedup is 0.48
[root@localhost_002 test]# ls -l /tmp/test/bac.txt 
-rw-r--r-- 1 root root 539 8月  10 10:32 /tmp/test/bac.txt

4:有时当服务器的端口号发生变化,则再拷贝是需要手动指定端口--port  8730

#指定端口也在/etc/rsyncd.conf文件里:

安装killall命令: yum    install    -y   psmisc

A机器服务端:
[root@localhost_001 ~]# netstat -lnp|grep rsync         #查看监听端口
tcp        0      0 192.168.149.129:8730    0.0.0.0:*               LISTEN      1533/rsync    


[root@localhost_002 ~]# rsync -avL --port 8730 192.168.149.129::test /tmp/test/
receiving incremental file list
bac.txt
111/test1/bac.txt
test1/bac.txt
sent 98 bytes  received 2,338 bytes  1,624.00 bytes/sec
total size is 1,617  speedup is 0.66

5:在/etc/rsyncd.conf配置文件里:list=true(列出模块)    |   false (不列出模块) :如下:

A机器(服务端)
[root@localhost_001 ~]# vim /etc/rsyncd.conf 
list=true
B机器(客户端)
[root@localhost_002 ~]# rsync --port=8730 root@192.168.149.129::
test  

A机器(服务端)
[root@localhost_001 ~]# vim /etc/rsyncd.conf 
list=false
B机器(客户端)
[root@localhost_002 ~]# rsync --port=8730 root@192.168.149.129::   

6:在/etc/rsyncd.conf配置文件里,也也支持验证同步,也就是说需要输入用户名和密码才能验证:如下:

A机器(服务器端)
[root@localhost_001 ~]# cat /etc/rsyncd.conf |grep -v  ^# |grep -v ^$ 
port=8730
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
address=192.168.149.129
[test]
path=/tmp/rsync
use chroot=false
max connections=4
read only=no       #允许用户给此模块目录上传文件:
list=true
uid=root
gid=root
auth users=test                           #验证的用户名
secrets file=/etc/rsyncd.passwd      #验证的密码配置文件:
hosts allow=192.168.149.130     #多个IP用空格隔开,也可以是一个网段:

[root@localhost_001 ~]# cat /etc/rsyncd.passwd 
test:nihao123                 #格式为:   用户名:密码
#需要修改其权限为600:
[root@localhost_001 ~]# chmod 600 /etc/rsyncd.passwd 

注释:rsync.passwd的密码配置文件/etc/rsyncd.passwd:格式为:用户名:密码

B机器(客户端测试):
[root@localhost_002 ~]# rsync -avL /tmp/test/ --port 8730 test@192.168.149.129::test
Password: 
sending incremental file list

sent 560 bytes  received 21 bytes  232.40 bytes/sec
total size is 1,617  speedup is 2.78

7:如果有时想写成脚本验证的方式,不人为的输入密码:则如下操作:   --password-file=/etc/rsyncd_pass.txt

1、首先在客户端机器创建一个密码文件,用以验证A机器的密码:   然后并给600的权限:
[root@localhost_002 ~]# cat /etc/rsyncd_pass.txt 
12345
[root@localhost_002 ~]# chmod 600 /etc/rsyncd_pass.txt 

2、然后在客户端侧往服务器侧推文件上去:
[root@localhost_002 ~]# rsync -avP /tmp/test/ --port=8730 --password-file=/etc/rsyncd_pass.txt test@192.168.149.129::test
sending incremental file list

sent 560 bytes  received 21 bytes  387.33 bytes/sec
total size is 1,617  speedup is 2.78

总结:rsync报错总结:

客户端报错:
[root@localhost_002 test]# rsync -avP 192.168.149.129::test/  /tmp/test/
rsync: getcwd(): No such file or directory (2)
rsync error: errors selecting input/output files, dirs (code 3) at util.c(1058) 

[Receiver=3.1.2]
需要用用exit退出当前终端,并重新进入shell即可:

2:有时重启rsync起不来:报错如下:

[root@localhost_001 ~]# rsync --daemon
[root@localhost_001 ~]# failed to create pid file /var/run/rsyncd.pid: File exists
rm -fr /var/run/rsyncd.pid 

则需要kaill   -9   PID号,然后重新启动rsync即可:       ====     killall  rsync 

3:有时使用密码验证时,报错如下

[root@localhost_002 ~]# rsync -avL /tmp/test/ --port=8730 test@192.168.149.129::test
Password: 
@ERROR: auth failed on module test
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]

拍错思路检查rsyncd.conf的配置文件--->密码是否正确----->密码文件的权限必须600

 

转载于:https://my.oschina.net/yuanhaohao/blog/1928632

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值