rsync远程同步如果不进行设置,需要输入密码,显然这在脚本运行中不可用

问题:rsync如何带密码进行远程同步,不需要再次输入密码呢?

解决方法:设置新的rsync远程同步账号密码

注意:解决方法很多,可以用环境变量,也可以用ssh秘钥,但相对的,这种方式比较安全

下面示例是从客户端192.168.1.100同步到服务端192.168.1.200

一、首先先安装rsync(安装方法很多,自己去搜,不知道的可以留言评论) 

客户端服务端都需要安装rsync

二、配置远程账号密码

1. 先看下服务端配置

vim /etc/rsyncd.conf

有些可能没有这个文件,没关系,没有的就自己新建一个

配置文件的内容如下

# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:

uid = root
gid = root
use chroot = no
max connections = 20
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
lock file = /var/run/rsync.lock
read only = false

# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# [ftp]
#        path = /home/ftp
#        comment = ftp export area

[book_chapter]
path = /www/wwwroot/hyapi/static/block/book/
auth users = ytsync
secrets file = /etc/rsyncd.passwd

其中 auth users = ytsync 就是设置虚拟账号

secrets file = /etc/rsyncd.passwd 设置密码文件

设置完配置文件后,显然要去设置密码

echo "rsync_yc:123456" > /etc/rsyncd.passwd

设置权限

chmod 600 /etc/rsyncd.passwd # 注意权限 

查看服务是否开启

ps -ef|grep rsync  |grep -v grep

如果开启,杀掉进程

kill -9 端口号 

启动重启rsync

rsync --daemon 

如果你的配置文件是在etc下,可以直接使用rsync --daemon重启,如果不是,这要加config=配置文件路径

例如:rsync --daemon --config=/var/rsyncd.conf

重启可能会报错

failed to create pid file /var/run/rsyncd.pid: File exists

解决方法:rm -rf /var/run/rsyncd.pid;再重新启动Rsync服务(rsync --daemon) 

2. 客户端配置

客户端创建一个文件,爱在哪建在哪建。如 /var/rsync/rsync.pass 然后文件里面就写密码就完事了。   比如  123456  就完了,不需要别的。然后在你输入rsync命令时加上--password-file=/etc/rsync.pass  参数 指定密码文件在哪就Ok  有个坑 密码文件必须 600 访问权限

 操作步骤

echo "123456" > /var/rsync/rsync.pass

 chmod 600 /var/rsync/rsync.pass

三、运行同步命令

rsync -avz --password-file=/var/rsync/rsync.pass /home/book/ rsync_yc@192.168.1.200::book_chapter

运行可能会报错

rsync: failed to connect to 120.55.58.172 (120.55.58.172): Connection timed out (110)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]

解决方法:

ps -ef|grep rsync  |grep -v grep        先确定下服务是否已经开启,没有就去开启在重试一下

netstat   -nultp         如果服务已经开启,看下是否有rsync的873端口

如果上面的都没问题,那就是服务器安全组没开放端口,添加下即可

四、附录

配置文件其他常用的配置参数

comment = BACKUP attachment           # 注释
ignore errors              # 忽略一些无关的IO错误
read only = false          # 设置为非只读,即可以传至服务器的相应目录。
list = false                # 不允许列文件
exclude = test/ test.php      #设置不同步的目录或文件用空格隔开

hosts allow = all     #允许连接服务器的主机IP地址,如果多个ip则用空格隔开
hosts deny = 172.25.0.0/24  #禁止连接服务器的主机IP地址,也可为*,表示所有。

两种 rsync 服务运行方式都需要配置 rsyncd.conf,其格式类似于 samba 的主配置文件

全局参数

在全局参数部分也可以定义模块参数,这时该参数的值就是所有模块的默认值

address --在独立运行时,用于指定的服务器运行的 IP 地址;由 xinetd 运行时将忽略此参数,使用命令行上的 –address 选项替代。默认本地所有IP

port --指定 rsync 守护进程监听的端口号。 由 xinetd 运行时将忽略此参数,使用命令行上的 –port 选项替代。默认 873

motd file --指定一个消息文件,当客户连接服务器时该文件的内容显示给客户

pid file --rsync 的守护进程将其 PID 写入指定的文件

log file --指定 rsync 守护进程的日志文件,而不将日志发送给 syslog

syslog facility --指定 rsync 发送日志消息给 syslog 时的消息级别

socket options --指定自定义 TCP 选项

lockfile --指定rsync的锁文件存放路径

timeout = 600 --超时时间

模块参数

模块参数主要用于定义 rsync 服务器哪个目录要被同步。模块声明的格式必须为 [module] 形式,这个名字就是在 rsync 客户端看到的名字,类似于 Samba 服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的

基本模块参数

path --指定当前模块在 rsync 服务器上的同步路径,该参数是必须指定的

comment --给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户

模块控制参数

use chroot = --默认为 true,在传输文件之前首先 chroot 到 path 参数所指定的目录下;优点,安全;缺点,需要 root 权限,不能备份指向 path 外部的符号连接所指向的目录文件

uid = --指定该模块以指定的 UID 传输文件;默认nobody

gid = --指定该模块以指定的 GID 传输文件;默认nobody

max connections --最大并发连接数,0为不限制

lock file --指定支持 max connections 参数的锁文件。默认 /var/run/rsyncd.lock

list --指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。默认为 true,显示

read only = --只读选择,也就是说,不让客户端上传文件到服务器上。默认true

write only = --只写选择,也就是说,不让客户端从服务器上下载文件。默认false

ignore errors --忽略IO错误。默认true

ignore nonreadable --指定 rysnc 服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些不应该被备份者获得的文件时是有意义的。 false

timeout = --该选项可以覆盖客户指定的 IP 超时时间。从而确保 rsync 服务器不会永远等待一个崩溃的客户端。对于匿名 rsync 服务器来说,理想的数字是 600(单位为秒)。 0 (未限制)

dont compress --用来指定那些在传输之前不进行压缩处理的文件。该选项可以定义一些不允许客户对该模块使用的命令选项列表。必须使用选项全名,而不能是简称。当发生拒绝某个选项的情况时,服务器将报告错误信息然后退出。例如,要防止使用压缩,应该是:”dont compress = *”。 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

模块文件筛选参数

exclude --指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 exclude 列表中。这等同于在客户端命令中使用 –exclude 来指定模式

exclude from --指定一个包含 exclude 规则定义的文件名,服务器从该文件中读取 exclude 列表定义

include --指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 include 列表中。这等同于在客户端命令中使用 –include 来指定模式

include from --指定一个包含 include 规则定义的文件名,服务器从该文件中读取 include 列表定义

模块用户认证参数

auth users --指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块(和系统用户没有任何关系)。用户名和口令以明文方式存放在 secrets file 参数指定的文件中。默认为匿名方式

secrets file --指定一个 rsync 认证口令文件。只有在 auth users 被定义时,该文件才起作用。文件权限必须是 600

strict modes --指定是否监测口令文件的权限。为 true 则口令文件只能被 rsync 服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认为true

模块访问控制参数

hosts allow --用一个主机列表指定哪些主机客户允许连接该模块。不匹配主机列表的主机将被拒绝。默认值为 *

hosts deny --用一个主机列表指定哪些主机客户不允许连接该模块

模块日志参数

transfer logging --使 rsync 服务器将传输操作记录到传输日志文件。默认值为false

log format --指定传输日志文件的字段。默认为:”%o %h [%a] %m (%u) %f %l”

设置了”log file”参数时,在日志每行的开始会添加”%t [%p]“;

可以使用的日志格式定义符如下所示:

%o --操作类型:”send” 或 “recv”

%h --远程主机名

%a --远程IP地址

%m --模块名

%u --证的用户名(匿名时是 null)

%f --文件名

%l --文件长度字符数

%p --该次 rsync 会话的 PID

%P --模块路径

%t --当前时间

%b --实际传输的字节数

%c --当发送文件时,记录该文件的校验码

另外可参考另一篇文章Linux下Rsync+sersync实现数据实时同步_yaodunlin的博客-CSDN博客

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐