正在加载今日诗词....

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
2
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST: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
2
3
4
5
6
#!/bin/sh
pnum=$(ps -ef | grep rsync| grep -v grep|wc -l)
if [ $pnum -eq 0 ]
then
rsync -avz --timeout=600 -e "ssh -p 2333" [email protected]:/mnt/user/huaweipt/ /mnt/user/ptshare/pt157/
fi

三、添加计划任务

10分钟执行一次脚本检查rsync进程是否存在,不存在重启任务

1
2
crobtab -e
*/10 * * * * sh /mnt/user/appdata/src/r.sh 1> /dev/null
作者

fei

发布于

2024-06-02

更新于

2024-06-02

许可协议

评论