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

Rij*_*h K 12 ssh rsync

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

rsync -aPe "ssh -i ' . $server->{'ssh_key'} . '" ' . $server_lock_dir;
Run Code Online (Sandbox Code Playgroud)

那么我在哪里输入密码?

Pau*_*l R 15

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

然后你就这样做:

rsync -a -e ssh /local/path/ server:/remote/path/
Run Code Online (Sandbox Code Playgroud)

(注意,这-e ssh已经是相当几年的默认值了,所以你可以省略它,除非你使用的是非常旧的版本.)

有关于设置密钥的"如何做"指南这里.


Son*_*ton 5

如果你想从cron工作,你有几种可能性:

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