上一篇我们介绍了如何手动备份资料,文末还给大家预告了这一篇要实现定时自动同步备份资料的功能,而且是加密传输,安全性很有保障,能够极大地解放大家的脑袋和双手,希望你们能喜欢。
本篇解决的实际问题
实现定时自动同步文件,可以避免每次备份传输时手动输入密码。
解决思路
使用rsync进行远程文件同步,配置ssh密钥认证。在整个同步过程中,公钥加密,私钥解密。私钥仅仅存放在本地主机,保证了登录安全。
配置过程中需要解决远程登录权限、密钥加解密等一系列问题,要细心、耐心一点,不要放弃,一定会配置成功的。我也是研究了好久,经历了九九八十一难才配置成功的。
同步前,先解决以下三个问题:
1.远程主机允许ssh密钥登录权限
2.本地生成密钥对,并将公钥部署到远程主机
3.修改远程主机公钥文件夹权限
环境说明:本地主机是银河麒麟V10版本,远程主机是V10 SP1版本。
~~~开始配置~~~
1.远程主机允许ssh密钥登录权限
登录远程主机,修改配置文件 /etc/ssh/sshd_config :
vim /etc/ssh/sshd_config
按照以下参数修改,开启密钥登录,关闭密码登录。
Include /etc/ssh/sshd_config.d/*.conf
Port 22
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
PermitEmptyPasswords yes
然后重启服务:
sudo systemctl restart sshd
2.本地生成一对密钥(公钥和私钥),将公钥部署到远程主机
(1)生成SSH密钥对
ssh-keygen -t rsa -b 4096
如下图所示,输入密钥存放的路径,默认路径为:~/.ssh/id_rsa 。这里的~表示用户主目录/home/ht 。这里采用默认路径,直接按回车键。
如下图所示,提示设置密码、确认密码。这里直接按两次回车键,设置为空密码。
最终结果如下图所示,提示秘钥对生成成功,保存在 ~/.ssh/ 目录下面。
(2)查看公钥
生成密钥对后,公钥会保存在 ~/.ssh/id_rsa.pub 文件中。用以下命令查看公钥内容:
cat ~/.ssh/id_rsa.pub
公钥应该同步复制到远程主机~/.ssh/authorized_keys文件内。
(3)将公钥复制到远程主机
ssh-copy-id -i ~/.ssh/id_rsa kylin@192.168.0.118
执行上述命令后,系统提示要输入远程主机上该用户的密码。输入密码并按回车键,指定的公钥就会复制到远程主机 ~/.ssh/authorized_keys 文件中。
3.修改远程主机公钥文件夹权限
SSH对密钥和文件夹权限要求非常严格。权限修改如下:
(1)远程主机公钥的上级两个目录权限修改为700。
chmod 700 /home/kylin
chmod 700 /home/kylin/.ssh
kylin是远程主机用户名,大家根据自己情况修改。
(2)远程主机公钥文件authorized_keys的权限修改为644。
chmod 644 /home/kylin/.ssh/authorized_keys
文件同步操作步骤:
1.创建一个 shell 脚本rsync_sync.sh
vim rsync_sync.sh
2.在脚本中写入 rsync 命令,同时手动执行脚本,检测能否正常同步到备份电脑。
#!/bin/bash
rsync -avz -e "ssh -i /home/ht/.ssh/id_rsa" /home/ht/share/ kylin@192.168.0.118:/home/kylin/htbackup/
参数说明
基本语法:rsync [选项] 源 目标
[选项]
-a:归档模式,用于递归复制并保持文件属性。
-v:详细模式,显示正在处理的文件信息。
-z:压缩文件数据,减少传输的数据量。
-n:模拟运行,不实际进行任何更改,用于预览操作效果。
-P:显示进度,并部分传输文件。
-e:使用指定的私钥。
--delete:删除目标目录中在源目录中不存在的文件,以保持目标目录与源目录一致。
--exclude:排除匹配的文件或目录。
--include:包含匹配的文件或目录。
@前的kylin是备份终端电脑的用户名,@后的ip为备份终端ip地址,ip和路径之间用:连接。
3.给脚本文件添加执行权限
chmod +x rsync_sync.sh
4.设置 crontab 定时同步任务
crontab -e
* * * * * /home/ht/rsync_sync.sh >> /home/ht/sync.log 2>&1
参数说明
基本语法:* * * * * [command]
每条命令由五个字段和一个命令组成:
第1个字段:分钟(0-59)
第2个字段:小时(0-23)
第3个字段:日期(1-31)
第4个字段:月份(1-12)
第5个字段:星期几(0-7,其中0和7都表示星期天)
[command]命令:>>和2>&1表示将标准输出、错误信息记录到日志文件sync.log
特殊字符:
, 表示多个值,例如 1,3,5。
- 表示一个范围,例如 1-5。
/ 表示步长,例如 */10 表示每隔10分钟。
示例:
* * * * * 表示每分钟执行一次 command 命令。建议测试时使用该命令。
0 1 * * * command 表示每天凌晨1点执行一次 command 命令。
30 18 * * 1 command 表示每周一的18:30执行一次 command 命令。
0 8 * * 1 rm /tmp/*.tmp 表示每周一早上8点清理临时文件。
0 * * * * /home/ht/backup.sh 表示每小时执行一次数据备份。
5.重启cron服务
sudo systemctl restart cron
6.检查同步情况
每隔一分钟查看一下配置的sync.log,看看是否同步成功。也可以观察远程主机同步文件夹是否成功同步了文件。
如上图所示,表示文件同步成功。
7.返回第四步,重新设置 crontab 定时同步时间。
暂无评论内容