使用公钥/私钥通过 ssh 使用 rsync 不起作用

使用公钥/私钥通过 ssh 使用 rsync 不起作用

我在 backup.sh 文件(chmod 775)中有一个脚本:

rsync -e 'ssh -p 31234' -avlz --delete --stats --progress --copy-links [email protected]:/home/admin/rsync /home/myname/rsync/foo/

当我手动调用它时,一切都运行良好(并且我不必输入密码)。但是当我从 cron 调用它时,它不起作用

我在我的同事(具有与我相同的访问权限)的计算机上使用了相同的设置,并且运行良好。

怎么了?

答案1

我已经设置了无密码 ssh 登录。我使用以下命令: rsync --delete -auve 'ssh -i /home/red/.ssh/cron_jobs_key' red@othermachine:/source/dir1 /dest/dir2

这里的密钥是“ -i /home/red/.ssh/cron_jobs_key”,我已在其中设置了无密码的 ssh 登录。否则,当我登录本地计算机时,我必须输入我的 ssh 密钥。我专门为 cron 作业生成了这个 ssh 密钥。

答案2

一些提示:

  • 检查您的本地电子邮件(如果您配置了它)。Cron 将通过电子邮件发送计划命令的输出。
  • 确保 rsync 在您的 PATH 中。您可以通过在 cron 作业中运行“env”命令或在现有脚本中包含 env 命令来检查这一点。即添加一行:“env > /tmp/env_output.txt”,然后检查该文件。
  • 您可以在 crontab 的顶部定义一个 PATH 变量:

PATH=/sbin:/bin:/usr/sbin:/usr/bin

答案3

通过提到您不必输入密码,我假设您使用 ssh-agent 在每个会话中输入一次密码。

这无法从 cron 中工作,因为 cron 无法访问您的 SSH_AUTH_SOCK 变量,因为它是在机器启动时启动的,而不是在您当前会话中启动的。

如果您希望它起作用,您必须使用无密码密钥,这可能就是您的同事正在使用的。

相关内容