【发布时间】:2022-06-25 02:01:56
【问题描述】:
我在打开的终端窗口中运行了一个脚本:
while sleep 345600; \
do pass="$(security find-generic-password -w -s 'service' -a 'account')"; \
sudo --stdin <<< "${pass}" head /etc/hosts; \
done
当进行测试时,我手动运行此脚本并将 sleep 设置为 1,它按预期工作,sudo 在没有用户交互的情况下获得通过。然后,当我延迟 4 天运行脚本时,它不会在指定时间内运行相同的说法,sudo 等待来自用户终端的密码(即手动输入!)。我什至可以将pass 变量设置为包含实际的纯文本密码,但无济于事。
为什么会有这种差异?
【问题讨论】:
-
macOS sudo 与 Linux sudo 非常不同。在macos下可能不行
-
--stdin选项不存在 - 请参阅 the macos sudo man-page - 实际上根据手册页,只允许使用单字符选项。也许这就是--stdin没有产生错误消息的原因,而只是将其作为sudo 的正常参数。 -
@user1934428 ,系统 sudo 手册页(截至 2020 年)显示允许短选项和长选项。
-
如果您查看我发布的链接,它会在页面底部显示 2022。如果您可以发布指向您所引用的手册页的链接,将会很有帮助。
-
差异可能是由于 sudo 在每次成功运行后将凭据缓存 5 分钟。在运行之间执行
sudo -K以删除这些以进行测试。
标签: zsh sudo macos-big-sur iterm