做到这里,其实备料机 (backup.linuxidc.com) 就可以透过免打密码的 SSH 认证,直接 ssh 联机到伺服机 (server.linuxidc.com) 了。但是这种联机会『允许所有来源、允许所有指令』,所以现在要改一下。
三、限制密钥认证 SSH 联机的来源和权力
以下的动作也都是在 server.linuxidc.com 进行
1. 编辑 ~/.ssh/authorized_keys 这个档案,在第一个字 (ssh-dss) 前面加入
from="backup.linuxidc.com",command="/home/xiaochen/validate-rsync"
记得这一坨字和 “ssh-dss” 这个单字之间要空一格。from 就是 backup.linuxidc.com 的 DN 或 IP, command 则是我放验证 SSH Command 的脚本文件的位置。
2. 接着要做验证脚本文件,这个例子中就是 /home/xiaochen/validate-rsync 这个档案,记得存盘后要 chmod +x:
[档案开始,不包含此一行]
#!/bin/sh
case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected"
;;
*\(*)
echo "Rejected"
;;
*\{*)
echo "Rejected"
;;
*\;*)
echo "Rejected"
;;
*\<*)
echo "Rejected"
;;
*\`*)
echo "Rejected"
;;
*\|*)
echo "Rejected"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected"
;;
esac
[档案开始,不包含此一行]
要注意,虽然现在 ssh 联机认证已经限制了可用的指令,但只要拿到私钥,一样可以从 backup 这台机器登入到 server ,可以复制所有可存取的档案,所以私钥要小心不能流出去。
四、加入密钥信息
现在回到 backup.linuxidc.com 。编辑刚刚在步骤 一、 里面做的 /home/xiaochen/rsync.sh,因为现在要加入密钥信息。大概改成这样:
[档案开始,不包含此一行]
#!/bin/sh
RSYNC=/usr/local/bin/rsync
SSH=/usr/bin/ssh
KEY=/home/xiaochen/id_dsa.key # 私钥路径
#[加入上面这一行,当然你要改成你的私钥路径]
RUSER=xiaochen
RHOST=192.168.10.235
RPATH=/home/xiaochen/test
LPATH=/mnt/database/fileserver/mirror.linuxidc.com
$RSYNC -e "$SSH -i $KEY" -avzP --delete $RUSER@$RHOST:$RPATH $LPATH
# 最后一行的『指令』要加入 -i $KEY 这个参数,在 $SSH 的后面,中间空一格。
[档案结束,不包含此一行]
然后执行一次,看看有没有正常。
如果一切正常的话,其实你可以把 rsync.sh 最后一行指令里面的 -avz 参数改成 -az ,毕竟 -v 是我们要『边抓边看进度』的时候在用的。
五、加入工作排程
在 backup.linuxidc.com 以 xiaochen 身份执行 crontab -e,加入
0 5 * * * /home/xiaochen/rsync.sh
这是在每日 05:00 执行一次,当然你可以改成别的时间。
--------------------------------------分割线 --------------------------------------
CentOS 6.5下Rsync远程同步
Ubuntu Linux下用Rsync进行数据备份和同步配制