当我在终端中手动运行时,我在 Mac OS X Server 和 Linux Centos 之间有一个有效的 rsync 设置。
我输入 rsync 命令,它会要求输入密码,我输入密码后它就会运行并完成。
现在我知道这是可行的,我决定通过 cron 完全自动化它。
首先,我通过在 Mac 服务器上运行以下命令创建 SSH 授权密钥:
ssh-keygen -t dsa -b 1024 -f /Users/admin/Documents/Backup/rsync-key
输入密码然后确认。然后我将 rsync-key.pub 文件复制到 linux 服务器并放置在 rsync 用户 .ssh 文件夹中,然后重命名为 authorized_keys:
/home/philosophy/.ssh/authorized_keys
然后我确保authorized_keys文件在文件夹chmod 700中是chmod 600。
然后我设置了一个让 cron 运行的 shell 脚本:
#!/bin/bash
RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
KEY=/Users/admin/Documents/Backup/rsync-key
RUSER=philosophy
RHOST=example.com
RPATH=data/
LPATH="/Volumes/G Technology G Speed eS/Backup"
$RSYNC -avz --delete --progress -e "$SSH -i $KEY" "$LPATH" $RUSER@$RHOST:$RPATH
然后授予 shell 文件执行权限,然后使用 crontab -e 将以下内容添加到 crontab:
29 12 * * * /Users/admin/Documents/Backup/backup.sh
上述命令运行后,我检查了我的 crontab 日志文件,日志中只显示了以下内容,没有其他内容:
Feb 21 12:29:00 fileserver /usr/sbin/cron[80598]: (admin) CMD (/Users/admin/Documents/Backup/backup.sh)
所以我认为一切都按预期运行。但是当我检查远程服务器时,没有文件被复制。
如果我像往常一样在终端中运行 backup.sh 文件,它仍会提示输入密码,但这次是通过 Mac Key Chain 系统而不是在控制台窗口中输入密码。使用 Mac Key Chain,我可以将其设置为保存密码,这样它就不会再次要求输入密码,但我确信当使用 cron 运行时,这个密码不会被获取。
我猜想这是 cron 中的 rsync 失败的原因,因为它需要密码才能连接,但我认为制作 SSH 密钥的整个想法就是防止使用密码。我是不是错过了什么步骤或做错了什么?
谢谢
斯科特
答案1
您可以创建没有密码的密钥,当系统要求输入密码时,只需按 Enter 键,您就会得到一个没有设置密码的密钥。仅将此密钥用于受信任的内部连接。
然后将此密钥与 cron 一起使用就可以了。