rsync通过非root账号传输文件到指定目录
===============================================
2022/7/17_第1次修改 ccb_warlock
===============================================
上周在做sonar数据库恢复时发现postgres备份文件有十几G,而测试服务器提供的账号用scp只能上传到“/home/用户名”目录下。
测试服务器的情况:
1. home目录的分区总共只有5个G,空间不支持上传十个G的文件;
2. data目录的分区倒是有500G,但是我没有root账号的使用权限,所以我需要用自己的账号将文件传到指定的data目录下。
Scp
首先我尝试用scp做远程传输,但是即使账号有管理员权限,仍然只能传到该账号自己的目录再移到data目录中,查资料也没有支持sudo的方案,所以我放弃了scp这条路。
SSH工具
公司电脑是windows的,我使用的Bitvise SSH Client的SFTP不支持使用sudo,所以我也放弃了这条路。
Rsync
最后我查到了rsync这个方案,使用了下能满足我的需要。
rsync类似scp做远程传输,并且rsync能使用sudo权限,直接将文件传到指定的目录中,不受必须先传到“/home/用户名”的限制。
1)首先需要保证2台服务器都装了rsync
由于我使用的2台服务器都有rsync,不确定centos官方镜像是不是默认安装了rsync,所以如果没安装先安装个rsync
2)目标服务器的/etc/sudoers中,增加用户不需要输入密码的配置
假设用户名为abc。
abc ALL=NOPASSWD:/usr/bin/rsync
3)接着在备份文件所在的服务器上执行下面的命令,将文件远程传输到目标服务器中
假设备份文件在“/opt/bak/sonar-01.sql”,需要使用账号(abc)传到目标服务器(192.168.1.1)的/data目录下。
rsync -svh --rsync-path="sudo rsync" /opt/bak/sonar-01.sql abc@192.168.1.1:/data