rsync连接远程主机进行同步或备份时有两种途径:
1.使用远程shell程序(如ssh或rsh)进行连接
2.使用TCP直接连接rsync daemon
rsync daemon是"rsync --daemon"或再加上其他一些选项启动的,它会读取配置文件,默认是/etc/rsyncd.conf,并默认监听在873端口上,当外界有客户端对此端口发起连接请求,通过这个网络套接字就可以完成连接,以后与该客户端通信的所有数据都通过该网络套接字传输。
rsync daemon的通信方式和传输通道与远程shell不同。
远程shell连接的两端是通过管道完成通信和数据传输的,即使连接的一端是远程主机,当连接到目标端时,将在目标端上根据远程shell进程fork出rsync进程使其成为rsync server。
rsync daemon是事先在server端上运行好的rsync后台进程(根据启动选项,也可以设置为非后台进程),它监听套接字等待client端的连接,连接建立后所有通信方式都是通过套接字完成的。
注意:rsync中的server的概念从来就不代表是rsync daemon,server在rsync中只是一种通用称呼,只要不是发起rsync请求的client端,就是server端,你可以认为rsync daemon是一种特殊的server,其实daemon更应该称之为service。
当源路径或目的路径的主机名后面包含一个冒号分隔符时,rsync使用远程shell传输;
当源路径或目的路径的主机名后面包含两个冒号,或使用rsync://URL时,rsync使用TCP直接连接rsync daemon。
特别的,如果只指定了源路径,而没有指定目的路径,rsync将会显示源路径中的文件列表,类似于使用命令ls -l。
rsync把本地端看作client,把远程端当成server。
rsync有两种常用的认证方式,一种为rsync-daemon方式,另外一种则是ssh。
在一些场合,使用rsync-daemon方式会比较缺乏灵活性,ssh方式则成为首选。
1、从本地同步到远程
# rsync -avz -e ssh /local/dir/ root@xx.xx.xx.xx:/remote/dir
# rsync -avz -e 'ssh -p 2222' /local/dir/ root@xx.xx.xx.xx:/remote/dir
两种方式的区别就是远程的ssh默认端口换了
2、从远程同步到本地
# rsync -avzP -e ssh root@xx.xx.xx.xx:/remote/dir/ /local/dir
# rsync -avzP -e 'ssh -p 2222' root@xx.xx.xx.xx:/remote/dir/ /local/dir
3. 从目的目录中删除不必要的文件(在server端没有的文件)
# rsync -avzP --delete -e ssh root@xx.xx.xx.xx:/remote/dir/ /local/dir
# rsync -avzP --delete -e 'ssh -p 2222' root@xx.xx.xx.xx:/remote/dir/ /local/dir
注意:
源路径的最后是否有斜杠有不同的含义:
有斜杠,只是复制目录中的文件;没有斜杠的话,不但要复制目录中的文件,还要复制目录本身!
目的路径的最后有没有斜杠,对传输没有影响!
rsync参数
http://einverne.github.io/post/2017/07/rsync-introduction.html
rsync基本命令和用法
https://www.cnblogs.com/f-ck-need-u/p/7220009.html
How to Securely Transfer Files via rsync and SSH on Linux
https://www.liquidweb.com/kb/how-to-securely-transfer-files-via-rsync-and-ssh-on-linux
How To Copy Files With Rsync Over SSH
https://www.digitalocean.com/community/tutorials/how-to-copy-files-with-rsync-over-ssh