我想要运行以下命令:(Centos 5.4)
rsync -avz /source_folder 192.168.1.1:/destination_folder
现在我正在从 CLI 运行它,但最终我想从 crontab (用户:root) 运行它。
当我运行它时,它总是要求我输入 root 密码。我想跳过密码。我已经看到了一些关于这个问题的答案,但它要么不起作用,要么我不确定我是否完全理解如何操作。有人可以帮忙吗?
答案1
正如其他人所说,您可以使用无密码的 ssh 密钥来执行此操作。这本质上是不安全的,您需要采取额外的步骤来为该过程添加一些安全性。我所做的是将密钥的使用限制为主机和命令。我已经根据我的笔记记下了这些,我认为我没有遗漏任何步骤。
首先要生成一个公钥对,该公钥对将仅用于此备份过程。当系统提示输入密码时,只需按两次回车键即可。
ssh-keygen -t rsa -b 2048 -C "For Backup use only"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/root/.ssh/id_rsa): /root/.ssh/backup.id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/backup.id_rsa.
Your public key has been saved in /root/.ssh/backup.id_rsa.pub.
The key fingerprint is:65:c0:cb:2b:9e:18:ff:b2:59:d4:b5:e8:ae:84:32:2b
将公钥传输/root/.ssh/backup.id_rsa.pub
到远程主机并将其添加到/root/.ssh/authorized_keys
文件中。
from=
在远程主机上,通过添加和command=
限制来限制公钥的使用。编辑/root/.ssh/authorized_keys
文件,找到备份密钥并添加将运行 cron 作业的主机的地址/名称以及要运行的命令。当使用此密钥登录时,将运行此命令,例如
from="192.168.254.207",command="/root/checkrsync",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3N...
您只能从 192.168.254.207 使用此密钥,并且只能运行命令 /root/checkrsync,其他功能也已被删除。
像这样编辑文件 /root/checkrsync
echo $SSH_ORIGINAL_COMMAND >/tmp/rsync.cmd
保存并使其可执行
chmod 700 /root/checkrsync
/root/checkrsync
一旦我们知道 $SSH_ORIGINAL_COMMAND 是什么,我们就会稍后进行更改。
在我们将要运行 cron 作业的主机上以交互方式运行 rsync 命令
/usr/bin/rsync -avz -e "/usr/bin/ssh -i /root/.ssh/backup.id_rsa" /source_folder [email protected]:/destination_folder
不要担心任何错误消息,我们只想在远程主机上生成 /tmp/rsync.cmd 文件
在远程主机上,准确记录 /tmp/rsync.cmd 文件的内容(它将类似于rsync --server -vlogDtprze.iLs . /destination_folder
)。
在远程主机上编辑/root/checkrsync
并将其更改为
if [[ "$SSH_ORIGINAL_COMMAND" == "rsync --server -vlogDtprze.iLs . /destination_folder" ]]
then
$SSH_ORIGINAL_COMMAND
fi
if 语句的右边是 /tmp/rsync.cmd 中的内容。
测试设置。在我们将运行 cron 作业的主机上再次以交互方式运行 rsync 命令
/usr/bin/rsync -avz -e "/usr/bin/ssh -i /root/.ssh/backup.id_rsa" /source_folder [email protected]:/destination_folder
现在它应该可以正确运行了,如果可以的话就将其安装到你的 crontab 中。
crontab -e
* 1 * * * /usr/bin/rsync -avz -e "/usr/bin/ssh -i /root/.ssh/backup.id_rsa" /source_folder [email protected]:/destination_folder
答案2
答案3
检查以下链接以设置 SSH 密钥。 SSH 密钥将帮助您设置无密码 ssh 登录。
http://techtrunch.com/linux/ssh-keys
设置CRON:
- 以 root 身份登录
打开终端并输入
crontab -e
,然后输入以下内容1 * * * * rsync -avz /源文件夹 192.168.1.1:/目标文件夹
笔记
这将每小时运行一次。
答案4
对于无密码的 ssh(或通过 ssh 进行 rsync),你需要一个密钥对没有密码。
您可以在您的来源机器ssh-keygen -t rsa
(到~/.ssh/id_rsa
),然后将您的公钥(的内容~/.ssh/id_rsa.pub
)添加到目的地機器 到~/.ssh/authorized_keys
。
阅读有关 cron rsync 备份的整篇文章: https://medium.com/@deltazero/linux-remote-backup-rsync-chroot-d797ba6babe5