如何安全地从 AppleScript 请求所需的密码?

oro*_*ome 0 macos applescript sudo

我有一个运行 shell 脚本的简单 AppleScript(应用程序):

do shell script "sudo killall -TERM java"
Run Code Online (Sandbox Code Playgroud)

失败并显示“ sudo no tty present and no Askpass program specified ”。

这里所需的行为是打开 OS X密码对话框(希望能够保存在钥匙串中以供将来使用),但是(我猜)我缺少一个步骤,告诉脚本启动必要的“ Asker”(令人惊讶的是,默认情况下不会发生)。

试过了

do shell script "ssh-askpass Sudo Password | sudo killall -TERM java"
Run Code Online (Sandbox Code Playgroud)

但也会出现错误。

从 AppleScript 调用 OS X 密码拨号的正确方法是什么?

Gor*_*son 5

首选方法确实是:

do shell script "sudo killall -TERM java" with administrator privileges
Run Code Online (Sandbox Code Playgroud)

正如您所指出的,这不会让您记住钥匙串中的密码。这是故意的——钥匙串的目的是让您不必记住服务密码等,而不是破坏本地安全策略(这本质上就是您想要做的事情。

您可以通过使用security命令来存储和检索密码来伪造它(请参阅MacScripter中的讨论和示例代码)。您可以使用 提示输入密码Tell application "System Events" to display dialog "Password:" default answer "" with hidden answer,尽管我不知道如何添加“记住钥匙串”复选框。这也引发了一些安全问题,因为我认为没有一种方法可以制定安全策略,允许您的脚本访问它而不提示用户确认,同时又允许其他脚本进行类似的访问。