没有密码的crontab中的简单rsync

我想运行以下内容:( Centos 5.4)

rsync -avz / source_folder 192.168.1.1:/destination_folder

现在我从CLI运行它,但最终我想从crontab(用户:root)运行它.

当我运行它时,它总是要求我输入root密码.
我想跳过密码.我已经看到了一些有关这方面的答案,但它要么不起作用,要么我不确定我完全理解如何做到这一点.
有人可以协助吗?

解决方法

正如其他人所说,你可以使用无密码短语ssh密钥.这本质上是不安全的,您需要采取其他步骤将一些安全性添加回流程.我所做的是将密钥的使用限制在 a host and a command.我已经从我的笔记中写了这些,我认为我没有错过任何步骤.

首先要做的是生成一个仅用于此备份过程的公钥对.当提示输入短语时,只需按两次输入.

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 = restrictions来限制公钥的使用.编辑/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_COMMND> /tmp/rsync.cmd

保存并使其可执行

chmod 700 / root / checkrsync

一旦我们知道$SSH_ORIGINAL_COMMAND是什么,我们将稍后更改/ root / checkrsync.

在我们将运行cron作业的主机上,以交互方式运行rsync命令

/usr/bin/rsync -avz -e "/usr/bin/ssh -i /root/.ssh/backup.id_rsa" /source_folder root@remote.host:/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 root@remote.host:/destination_folder

现在它应该正确运行,如果它然后安装到您的crontab中.

crontab -e 

* 1 * * *  /usr/bin/rsync -avz -e "/usr/bin/ssh -i /root/.ssh/backup.id_rsa" /source_folder root@remote.host:/destination_folder

相关文章

1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...
1 删除0字节文件 find -type f -size 0 -exec rm -rf {} ...
## 步骤 1:安装必要的软件包 首先,需要确保系统已安装 `dh...