使用cron和ssh键

时间:2014-06-30 17:10:15

标签: bash ssh cron crontab rsync

我正在使用一个通过ssh与服务器rsyncs的cron脚本。

当我直接将它们作为bash脚本运行时,命令工作得很好,但当我将它们作为cron运行时,cron会记录错误的权限。我认为这是因为cron用户无权访问ssh密钥。

这是我需要cron运行的代码:

rsync --progress -rvze ssh my_user@myserver/root_folder folder/

我可以将ssh密钥传递给cronfile,还是传递给脚本本身?如果是这样,你会提供一个像上面那样的例子吗?

2 个答案:

答案 0 :(得分:2)

在命令行中添加'-i'开关到ssh命令:

rsync --progress -rvze "ssh -i/path/to/ssh_private_key" my_user@myserver:/root_folder folder/

答案 1 :(得分:2)

我知道这个线程很旧,但是为了像我这样迷失于此问题的其他人,这是您的两个选择:

  • 按照lihao的建议输入密钥,
  • 添加正确的SSH环境变量,以便它将选择正确的密钥,就像在正常环境中运行的方式一样。

对于第二个选项,并假设您的cron作业使用正确的用户运行(否则,您的环境中还有许多要正确设置的内容),只需运行:

env|grep -i ssh

会有一行像这样:

SSH_AUTH_SOCK=/run/user/1000/keyring/ssh

您的用户ID可能有所不同。从那里,您可以将以下行添加到脚本中:

if [ -z "$SSH_AUTH_SOCK" ]
then
    export SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
fi

希望这会有所帮助!