将 cron 与 ssh 密钥结合使用

joh*_*ser 4 ssh bash cron rsync

我正在使用一个 cron 脚本,通过 ssh 与服务器同步。

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

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

rsync --progress -rvze ssh my_user@myserver/root_folder folder/
Run Code Online (Sandbox Code Playgroud)

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

jyt*_*tou 18

我知道这个线程很旧,但是为了像我一样偶然发现这个问题的其他人,这里有两个选择:

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

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

env|grep -i ssh
Run Code Online (Sandbox Code Playgroud)

会有这样一行:

SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
Run Code Online (Sandbox Code Playgroud)

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

if [ -z "$SSH_AUTH_SOCK" ]
then
    export SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
fi
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 你真是个有品味的人!:-) (2认同)