我想运行以下命令:(Centos 5.4)
rsync -avz /source_folder 192.168.1.1:/destination_folder
现在我从 CLI 运行它,但最终我想从 crontab (user:root) 运行它。
当我运行它时,它总是要求我输入 root 密码。我想跳过密码。我已经看到了一些关于这个的答案,但它要么不起作用,要么我不确定我完全理解如何去做。有人可以帮忙吗?
use*_*517 14
正如其他人所说,您可以使用无密码的 ssh 密钥来做到这一点。这本质上是不安全的,您需要采取额外的步骤来为流程添加一些安全性。我所做的是将密钥的使用限制为 host 和 command。这是我从笔记中写下来的,我认为我没有遗漏任何步骤。
首先要做的是生成一个仅用于此备份过程的公钥对。当提示输入密码时,只需按两次 Enter。
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
Run Code Online (Sandbox Code Playgroud)
将公钥传输/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...
Run Code Online (Sandbox Code Playgroud)
您只能使用来自 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 root@remote.host:/destination_folder
Run Code Online (Sandbox Code Playgroud)
不要担心任何错误信息,我们只想在远程主机上生成 /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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
现在它应该可以正常运行,然后将其安装到您的 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15023 次 |
最近记录: |