12

我想将 rsync 任务自动化为 cron 作业。由于它需要密码,我无法执行 cronjob。我需要与 rsync 命令一起指定密码,否则我会将密码存储在一个文件中并从中读取。我的命令将如下所示:

rsync -aPe "ssh -i ' . $server->{'ssh_key'} . '" ' . $server_lock_dir;

那么我把密码放在哪里呢?

4

3 回答 3

15

您不需要这样做 - 只需设置一对 ssh 密钥并将公钥放在远程系统的 .ssh 目录中。

然后你就这样做:

rsync -a -e ssh /local/path/ server:/remote/path/

(请注意,这-e ssh已经是几年前的默认设置了,因此您可以忽略它,除非您使用的是非常旧的版本。)

此处有关于设置密钥的“操作方法”指南。

于 2010-04-21T09:50:36.253 回答
5

如果你想让它在 cron 中工作,你有几种可能性:

  • 设置无密码 ssh 密钥 - 不是很安全
  • 设置无密码 ssh 密钥,但将它们与授权密钥文件中的 ssh ForceCommand 结合起来,以限制可以使用该 ssh 密钥运行的命令。在“ssh ForceCommand”上查看 man sshd、google
  • 设置密码 ssh 密钥,但将它们与钥匙串结合以在会话之间将密钥保存在内存中。我为此写了一篇博文:ssh, ssh-agent, keychain and cron notes
于 2011-04-07T02:48:34.833 回答
4

如果要远程复制文件:

  1. 确保您的本地计算机上有一个可以登录远程计算机的公钥。(在这种情况下,我的 ssh 密钥是“/home/myaccount/.ssh/id_rsa”
  2. 指定要与远程同步的本地文件夹,在我的情况下为“/home/myaccount/mysourcefolder”
  3. 指定远程服务器中的目标文件夹完整路径,在我的情况下为 remoteaccount@remoteserver:"/home/remoteaccount/mydestinationfolder/"

笔记:

  • --progress 是显示每个正在复制的文件的进度
  • -a 以递归方式传输 mysourcefolder 中的所有文件
  • -v 表示冗长
  • -z 压缩小文件的数据部分

我的命令如下所示:

rsync -avz --progress -e "ssh -i /home/myaccount/.ssh/id_rsa" /home/myaccount/mysourcefolder remoteaccount@remoteserver:"/home/remoteaccount/mydestinationfolder/"

于 2012-05-30T09:04:44.833 回答