rsync免密码传输
本文介绍使用rsync将pt文件夹从一台unraid(远程主机,ip192.168.22.157)迁移到另一台unraid(本地)。因数据量有20多TB,无法一次命令完成。在执行一段时间约2TB左右后程序会崩溃,所以需要一段脚本能自动检测进程是否在执行,如果没有发现rsync就自动执行一次。
该脚本的前提是在本地可以免密码登录远程主机。
一、rsync备份命令详解
假设希望将另一台主机(IP:192.168.22.157)备份到本地 /mydir/backup/
目录下,可以使用的命令如下:
1 | rsync -avP [email protected]:/repos/src/ /mydir/backup/ |
深度定制命令如下
1 | rsync -avz --timeout=600 --retry=3 -e "ssh -p 2333" [email protected]:/mnt/user/huaweipt/ /mnt/user/ptshare/pt157/ |
-a 表示归档模式,它保留原有的文件属性(如时间戳、权限等)并递归复制目录。
-v 表示详细模式,会在执行过程中输出详细的传输信息。
-z 表示启用压缩,可以在传输过程中减少带宽使用。
-e ssh 指定使用SSH作为传输的外壳程序,这对于网络间的文件传输非常重要,因为它提供了加密的安全通道。
-p 2333表示ssh端口为2333
-P 表示输出时显示更多内容如当前传送文件名称、速度、进度
–timeout和–retry选项增加超时时间和重试次数,但是–retry老版本不支持。
–delete 在源服务器上的文件删除后,在目标服务器同步删除
默认每次同步备份文件的时候,是需要输入 root 密码的。
1 | Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] |
注意
:rsync命令使用中,关于末尾斜线(/
)的说明:
- 如果源参数的末尾有斜线,就会复制指定目录下的内容,而不复制目录本身;
- 如果源参数的末尾没有斜线,则会复制目录本身;
- 目标参数末尾的斜线没有作用;
二、免密设置
2.1、生成密钥
在本地主机上生成密钥文件,命令如下:
1 | ssh-keygen |
输入这个命令后,一路回车即可。此时会在 ~/.ssh/
下生成 id_rsa.pub
文件。
2.2、拷贝公钥到远端服务器
1 | ssh-copy-id -i /root/.ssh/id_rsa.pub -p 2333 [email protected] |
-p 2333是指定ssh端口
2.3、再次同步
1 | rsync -avz --timeout=600 --retry=3 -e "ssh -p 2333" [email protected]:/mnt/user/huaweipt/ /mnt/user/ptshare/pt157/ |
此时就无需再输入密码了。
ps: –retry=3这个参数在unraid中不支持,版本问题,会导致脚本报错
1 | #!/bin/sh |
三、添加计划任务
10分钟执行一次脚本检查rsync进程是否存在,不存在重启任务
1 | crobtab -e |