2020年12月05日:研究 rsync通过ssh同步,总结出 5种配置
总结
- 方案1:使用root + path。不需要太多额外操作
- 方案2(推荐):使用非root(www)+ path方式。不需要额外操作,注意文件权限 - 简单,安全性中
- 方案3:使用root+module。需要配置rsyncd.conf,下同
- 方案4(推荐):使用www+module + sudo,额外需要配置sudo - 中等复杂,安全性好
- 方案5:使用www+module + 独立配置rsyncd_www.conf,不使用sudo,注意权限问题
- ssh 参数信息 可以写到配置文件 ~/ssh/config
- ssh不是22端口,可以加 -p 参数,比如 -p 2222
- 最简单的方式是 root/www + path,不用额外配置rsyncd.conf
- 推荐 使用 www用户 + sudo + rsyncd.conf ,安全性好、功能更丰富(过滤,控制访问IP,添加user/pass验证等功能)
- 注意目录、文件权限:chown -R www:www /data/www
准备工作:
1. 如果使用非root方案,需要在远程服务器创建用户(细节略过)。本文的非root用户 和 www用户 是一个意思
2. 生成ssh key,并部署到 远程服务器,注意文件路径、权限(细节略过)
ssh-keygen -b 2048
生成文件在 /var/lib/jenkins/.ssh/id_rsa
公钥写入远程服务器(根据方案选择一个)
/root/.ssh/authorized_keys (root)
/home/www/.ssh/authorized_keys (www)
环境说明
源目录是 src,目标目录是 /data/www,
rsyncd.conf 配置 www_data 模块,路径是/data/www,
本机IP是1.2.3.3 远程是1.2.3.4
本地用户是jenkins,远程是 root/www
rsync 的参数很多,略过和本文不相关的参数,只使用 -a
rsync命令格式
Access via remote shell: rsync [OPTION...] SRC... [USER@]HOST:DEST Access via rsync daemon: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
SRC:源文件或目录
DEST:目标文件或目录
USER@:目标用户,不加默认为root。
HOST:远程主机IP
方案1:用root帐号 + path方式
Host 1.2.3.4 User root PreferredAuthentications publickey,password IdentityFile ~/.ssh/id_rsa
注意:rsync -e "ssh -l user1" ... user2@ip:/path/
user参数的优先级是 user2 > user1 > config的配置
方案2:用www帐号 + path方式
rsync -e 'ssh -l www ' -a src 1.2.3.4:/data/www/
和方案1类似 -l 改成了www,需要注意 远程目录是否有权限写入
方案3:用root帐号 + module方式
use chroot = yes pid file = /data/log/rsyncd.pid lock file = /data/log/rsync.lock log file = /data/log/rsyncd.log write only = true read only = false #port = 8730 [www_data] uid=root gid=root path = /data/www/ #auth users = rsync_user #secrets file = /etc/rsyncd.pas #hosts allow = 1.2.3.3,127.0.0.1,0.0.0.0 #hosts deny = 0.0.0.0/0 #exclude from = /etc/rsyncd_filter
如果不开启auth users,会忽略,开启则有两种验证,不要混淆。如果想进一步加强安全性,可考虑开启。
方案4:用www帐号 + module + sudo 方式
rsyncd.conf 使用方案3,需要额外配置sudo,让www 用root权限 启动 远程的/usr/bin/rsync
visudo:
www ALL=(root) NOPASSWD: /usr/bin/rsync Defaults:www !requiretty
方案5:用www帐号 + module + 独立rsyncd.conf 配置 方式 (出问题处理麻烦)
use chroot = no
pid file = /data/log/rsyncd_www.pid
lock file = /data/log/rsync_www.lock
log file = /data/log/rsyncd_www.log
write only = true
read only = false
#port = 8730
[www_data]
path = /data/www/
#auth users = www
#secrets file = /etc/rsyncd.pas
hosts allow = 1.2.3.3,127.0.0.1,0.0.0.0
hosts deny = 0.0.0.0/0
exclude from = /etc/rsyncd_filter