最近折腾了一个小需求,将一台windwos下的文件定时同步到linux机器上,这样内外网访问基本一致,记录一下,参考了几篇文章,地址见文末。
1、Windows 客户端配置:
cwRsync是基于cygwin平台的rsync软件包,支持windows对windows、windows对Linux、Linux对windows高效文件同步。Cwrsync还集成了OpenSSH for windows,可以实现Linux 下Rsync一模一样的操作。使用 cwRsync 来同步文件后,只需要对一台主服务器进行文件修改,其他镜像服务器可以自动同步,包括文件的更新、删除、重命名等。
- cwRsync分为付费版和免费版两种,我们只需要使用免费版即可,在官方网站上面下载 cwRsync Free Edition 版本。
https://www.itefix.net/content/cwrsync-free-edition
- 解压 cwRsync_5.7.2_x86_Free.zip 到 C:\cwRsync目录中
- 双击 cwrsync.cmd 运行,会在当前生成 home\%USERNAME%\.ssh 目录,供 ssh 认证方式使用。
- 为系统新建一个环境变量,目录为cwrsync的bin目录下,例:path: C:\cwRsync\bin。这样 cmd 命令行下可以直接运行 rsync 这个命令
C:\Users\Administrator>rsync --version
rsync version 3.1.3 protocol version 31
2、linux客户端
Linux 一般自带 rsync 工具,没有的话,安装也很简单 apt-get install rsync 搞定
-
-
- 配置文件
- vim /etc/rsyncd.conf
# configuration example:
# 创建密码文件
pid file = /var/run/rsync.pid
port = 873
log file = /var/log/rsyncd.log
lock file = /var/run/rsync.lock
# create new
# any name you like
[resources]
# destination directory to copy
path = /home/wwwroot/你的域名目录/wiki/data/
# hosts you allow to access
hosts allow = *
hosts deny = *
secrets file = /etc/rsyncd.pass
# 表示该节点是否可被发现。
list = true
# 指定传输到这里文件所属的用户。
uid = www
# 指定传输到这里的文件所属的组。
gid = www
# rsync连接时的用户名,要和客户端rsync的命令一致
auth users = www
# 该目录是否只读
read only = no
transfer logging = yes
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
timeout = 600
touch /etc/rsyncd.pass
#权限修改
chown root:root /etc/rsyncd.pass
chmod 600 /etc/rsyncd.pass
vim /etc/rsyncd.pass
内容为:www:passwd # 用户名:密码 如我的 www:3660wiki
-
3、 windows下配置文件设置
C:\cwRsync\ 目录下新建 rsync.pass
密码和前面linux下相同,3660wiki ,这里有坑,不需要用户名,只有纯密码!
否则后面会遇到类似这样的错误
auth failed on module resources from unknown (ip省略): missing secret for user "www"
同步测试
同步命令如下
rsync -acrtzv --password-file=/cygdrive/c/cwRsync/rsync.pass /cygdrive/d/DokuWikiStick/dokuwiki/data/ www@服务器ip::resources
因为这里有了用户名www, 所以前面rsync.pass文件不需要用户名了
测试通过后,设置定时处理文件
dynamicres_sync.bat
@echo off
rsync -acrtzv --password-file=/cygdrive/c/cwRsync/rsync.pass /cygdrive/d/DokuWikiStick/dokuwiki/data/ www@服务器ip::resources
每15分钟执行一次 dynamicres_sync.bat 这个同步脚本,够用了。
查看日志
tail -10f /var/log/rsyncd.log
2018/05/17 01:45:01 [10078] connect from UNKNOWN (*.*.*.*)
2018/05/16 17:45:02 [10078] rsync to resources/ from www@unknown (*.*.*.*)
2018/05/16 17:45:02 [10078] receiving file list
2018/05/16 17:46:10 [10078] sent 1907 bytes received 581652 bytes total size 200818115
否则依然会出现如下报错,害我查了半天服务器配置,后来回想起自己动过windows下客户端密码文件的权限:)
C:\cwRsync>dynamicres_sync.bat
ERROR: password file must not be other-accessible
rsync error: syntax or usage error (code 1) at authenticate.c(196) [sender=3.1.3]
参考如下
https://www.liurongxing.com/use-rsync-crontab-windows-system-file-to-linux-system.html
http://happyqing.iteye.com/blog/2218153
https://www.itefix.net/content/how-can-i-secure-connections-between-windows-rsync-clients-and-cwrsync-servers (这篇代后续折腾)
文章评论
网上无法下载免费版了,楼主能发一份给我吗?谢谢
@路人 官网还真没找到,已发送