如何在不询问密码提示的情况下自动执行rsync

时间:2010-04-21 09:45:13

标签: ssh rsync

我想将rsync任务自动化为cron作业。由于它需要密码,我无法做cronjob。我需要指定密码和rsync命令,否则我会将密码存储在一个文件中,我会从中读取。我的命令看起来像这样:

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

那我在哪里输入密码?

3 个答案:

答案 0 :(得分:15)

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

然后你就这样做了:

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

(请注意,-e ssh已成为默认值,因此您可以省略它,除非您使用的是旧版本。)

有关设置按键here的“操作方法”指南。

答案 1 :(得分:5)

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

  • 设置无密码的ssh密钥 - 不太安全
  • 设置无密码的ssh密钥,但将它们与authorized_keys文件中的ssh ForceCommand结合使用,以限制可以使用该ssh密钥运行的命令。请参阅man sshd,google on“ssh ForceCommand”
  • 设置passworded ssh键,但将它们与keychain结合使用,以便在会话之间将密钥保存在内存中。我写了一篇博文:ssh, ssh-agent, keychain and cron notes

答案 2 :(得分:4)

如果您想远程复制文件:

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

  4. 注意:

    • - 进度是显示正在复制的每个文件的进度
    • -a重新传输mysourcefolder中的所有文件
    • -v for verbosity
    • -z压缩小文件的数据部分

    我的命令如下所示:

      

    rsync -avz --progress -e“ssh -i /home/myaccount/.ssh/id_rsa”   /家/我的帐户/ mysourcefolder   remoteaccount @ REMOTESERVER: “/家/ remoteaccount / mydestinationfolder /”