目录
一、rsync 简介
二、rsync 下载、安装
三、rsync 服务器端部署
四、rsync 客户端上传文件
五、参考资料
一、rsync 简介
rsync 用于两台主机间的文件同步,需求是内网可以访问外网,但是外网不能直接访问内网。所以需要一个机制将内网的源码(或者编译好的库)推送到外网。
这里将文件发起方称为客户端,文件接收方称为服务器端。两端系统都为 Linux。
二、rsync 下载、安装
1、切换到 root(外网机不切 root 无法访问 Internet)
sudo su - root
2、下载 rsync
wget https://download.samba.org/pub/rsync/src/rsync-3.1.3.tar.gz
3、解压、编译、安装
tar zxf rsync-3.1.0.tar.gz
cd rsync-3.1.0
./configure
make && make install
三、rsync 服务器端部署
1、rsync 配置文件
安装完成后请确保配置文件 /etc/rsyncd.conf 存在,否则请创建后自行填写,否则会报错。配置文件的格式可以在官网找到的文档中找到:https://download.samba.org/pub/rsync/rsyncd.conf.html,简单的配置如下:
uid = zhoutianya
gid = zhoutianya
use chroot = no
max connections =2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 122.224.197.37
hosts deny = 0.0.0.0/32
auth users = zhoutianya
secrets file = /etc/rsync.password
#################################
[backup]
path = /backup
2、rsync 密码文件
密码文件在 /etc/rsync.password,如果不存在也许要自行创建:
echo "zhoutianya:aaaaaa" > /etc/rsync.password
chmod 600 /etc/rsync.password
3、启动 rsync 后台进程
rsync --daemon
四、rsync 客户端上传文件
1、密钥对生成
ssh-keygen -t dsa -P '密码' -f ~/.ssh/dsa_login_key
密码填上,然后会在 ~/.ssh 目录下上生成公钥和私钥。公钥和私钥的名字一致,均为 dsa_login_key。私钥无后缀,公钥后缀为 .pub 。
然后将公钥上传到服务器上(我们公司是填在某个网页上...哈哈,简单粗暴),然后本地利用私钥进行登陆。
2、私钥追加
进入 ~/.ssh 目录,找到 authorized_keys,如果没有这个文件就创建一个。授予 600 权限,然后将你的私钥追加到这个文件中。
cd ~/.ssh/
chmod 600 ./authorized_keys
cat ./dsa_login_key.pub >> ./authorized_keys
3、ssh连接测试
利用 ssh 命令进行私钥连接,连接的IP是服务器端的IP,即外网IP。端口号由 -p 指定,这个需要看外网的 ssh 进程的监听端口是多少。zhoutianya 是用来进行连接的用户身份。
ssh -i ./dsa_login_key zhoutianya@79.110.152.153 -p 20160
4、rsync 上传文件
ssh 连接成功后,就可以利用 rsync 上传文件了。首先,在自己的用户 /home/zty 下建立一个文件夹 test 在本地建立一个 test 的文件夹,然后进入 test 创建一个叫 test_upload 的文件,并且输入一段信息 "only for test"。
mkdir test
cd test
touch test_upload
echo "only for test" > ./test_upload
然后调用以下指令进行文件夹传输:
rsync -avz --delete --stats --progress /home/zty/test -e 'ssh -i /root/.ssh/dsa_login_key -p 20460' zhoutianya@79.110.152.153:/home/zhoutianya/test
-avz 代表参数一般就是这么几个,具体可以看官网的解释, /home/zty/test 是刚才我们自己创建的源目录,-e 'ssh -i /root/.ssh/dsa_login_key -p 20460' 指定了 ssh 连接的私钥地址和目标服务器(外网服务器)的端口号,这个在外网服务器的 /etc/ssh/sshd_config 配置文件中定义, zhoutianya@79.110.152.153:/home/zhoutianya/test 则是需要传输的目标地址,其中zhoutianya是用户,79.110.152.153为外网服务器IP,/home/zhoutianya/test是目标目录。
--delete、--stats、--progress 是一些可选项。
a) --delete :以SRC为主,对DEST进行同步。多则删之,少则补之。注意"--delete"是在接收端执行的,所以它是在:exclude/include规则生效之后才执行的。
b) --status :显示文件传输的状态信息。
c) --progress :显示文件传输的进度信息。
文件上传前会让你输入密码,就是之前创建密钥对的时候填的那个密码。
Enter passphrase for key '/root/.ssh/dsa_login_key':
sending incremental file list
test/
test/test_upload
sent 143 bytes received 39 bytes 17.33 bytes/sec
total size is 14 speedup is 0.08
注意:如果上传时出现 rsync: recv_generator: mkdir "???" failed: Permission denied (13) 。就是服务器端的相应文件夹权限问题,利用 chmod 修改权限即可。
5、rsync 排除文件
最后,我们需要将某些文件夹下的文件排除,不作上传(主要还是为了某些核心源码文件不想上传到外网,只把编译好的库上传即可),可以利用 --exclude-from 参数。
在 /home/zty/ 下建立一个文件exclude.txt,并且再里面填上需要排除的文件,然后加上如下参数即可。
--exclude-from '/home/zty/exclude.txt'
五、参考资料
https://www.cnblogs.com/f-ck-need-u/p/7220009.html
https://www.cnblogs.com/george-guo/p/7718515.html
https://download.samba.org/pub/rsync/
https://www.jb51.net/article/39468.htm