crontab 中无需密码即可进行简单的 rsync

crontab 中无需密码即可进行简单的 rsync

我想要运行以下命令:(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

您需要设置无密码ssh 密钥认证

设置时请牢记安全问题。我建议使用主机访问列表使用密钥来限制源IP。

答案3

检查以下链接以设置 SSH 密钥。 SSH 密钥将帮助您设置无密码 ssh 登录。

http://techtrunch.com/linux/ssh-keys

设置CRON:

  1. 以 root 身份登录
  2. 打开终端并输入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

相关内容