当我从用户 crontab 运行 /usr/bin/security 时,似乎无法成功从钥匙串中检索密码。在我的终端上运行良好。
我还可以通过 cron 邮件输出看到我的 USER、HOME 和 PATH 都在 cron 内部正确设置。
我已经能够确定,当它在 cron 中运行时,它只能看到我的系统钥匙串,而看不到我的用户钥匙串:
"/Library/Keychains/System.keychain"
"/Library/Keychains/System.keychain"
然后我告诉 /usr/bin/security 明确使用我的用户钥匙串,现在我没有得到任何输出,但退出代码是 36。
#security error 36
Error: 0x00000024 36 CSSM_ERRCODE_OBJECT_ACL_REQUIRED
我似乎不明白这是什么意思。
我在 cron 中指定了我的 PATH,并尝试通过 bash 登录 shell 内部运行 /usr/bin/securitybash -l -c /usr/bin/security...
这是我正在运行的 cron 命令:
bash -l -c '/usr/bin/security find-generic-password -g -a myusername -s test_vault /Users/myusername/Library/Keychains/login.keychain 2>&1 ; echo $?'
我从 cron 收到的邮件显示 PATH 已成功获取。
有什么想法吗?谢谢!
答案1
因此看起来即使我试图在我的 crontab 中运行它,但是由于 cron 本身以 root 身份运行,它仍然不允许访问我的钥匙串。
我发现这博客文章讨论了使用 launchd 来安排作业,我的作业现在可以通过 launchd 正常工作!:)