2

我制作了一个运行几个脚本的自动化应用程序(并且不使用任何 GUI,但由于我使用了 admin 密码,它正在为管理员密码打开一个 GUI with administrator privileges)。主脚本使用

do shell script (quoted form of myCommand) with administrator privileges

因此,在执行应用程序时,会显示图形管理员密码提示。

我试图在通过 bash 安装后自动执行此应用程序,并且想知道如何绕过 GUI 密码提示;我正在寻找一种通过 bash 执行应用程序并静默运行的方法(没有 GUI,没有密码提示)。

因为with administrator privileges所有的共同点

sudo open -a /Application/appname.app &

sudo osascript -e 'tell app id "com.app.bundleid"' -e activate -e end

即使以 root 身份运行,仍然会显示 GUI 密码提示。

有没有办法通过 bash 为 OSX 打开提供 GUI 密码提示的应用程序?还是有更好的方法我应该执行主脚本而不是do shell script (quoted form of myCommand) with administrator privileges

4

3 回答 3

1

我在您对问题的评论中看到您将在脚本中输入密码。这不是一个好主意。如果您需要在脚本中使用密码,您可以使用钥匙串来存储密码并让脚本检索它。这是一种存储密码的安全方式,因为如果您将密码放在 AppleScript 中,它会以明文形式存储,因此任何人都可以轻松收回。

创建密码项- 打开 Keychain Access 应用程序并选择左栏中的钥匙串。然后单击文件>新密码项...,为其命名,帐户名称(可以是任何名称),然后输入密码。如果需要,您可以在项目上“获取信息”并将类型更改为“通用密钥”以将其与其他密码区分开来。

注意:您必须将您为项目提供的名称放入代码中的 passwordItemName 变量中

当您运行此代码时,将弹出一个对话框,询问您是否要允许访问该项目。如果您单击“始终允许”,那么您将阻止此对话框在未来再次出现。或者,您可以通过获取有关钥匙串项的信息、转到访问控制选项卡并在“始终允许访问...”部分中添加“安全”二进制文件来完全阻止此对话框。

-- global variables are often saved in a writable applescript
-- so we ensure it's a local variable to prevent this
local pword

set pword to getPW()
do shell script "/path/to/script/file.sh" user name "adminusershortname" password pword with administrator privileges

on getPW()
    set passwordItemName to "ApplescriptAdminPass"
    do shell script "/usr/bin/security find-generic-password -wl " & quoted form of passwordItemName
end getPW
于 2013-09-04T21:35:42.333 回答
1

如果已启用对辅助设备的访问,您可以使用 GUI 脚本与密码对话框进行交互:

tell application "System Events" to tell process "SecurityAgent"
    set value of text field 2 of scroll area 1 of group 1 of window 1 to "pa55word"
    click button 2 of group 2 of window 1
end tell
osascript -e 'do shell script "ls ~root" with administrator privileges' &
sleep 1
osascript -e 'tell application "System Events" to tell process "SecurityAgent"
    set value of text field 2 of scroll area 1 of group 1 of window 1 to "pa55word"
    click button 2 of group 2 of window 1
end tell'

例如,通常sudo open -a Finder不会以 root 身份打开 Finder,但sudo /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder会。

于 2013-09-04T18:32:45.300 回答
0

我能够绕过 GUI 密码提示并仍然使用的方法with administrator privileges是重新编译 Automator 应用程序并在线提供用户和密码:

on run {input, parameters}
    set myCommand to POSIX path of ((path to me as string) & "Contents:Resources:script_name.sh")
    do shell script (quoted form of myCommand) user name "local-admin" password "local-adminpassword" with administrator privileges
    return input
end run

这完成了以管理员权限运行 Applescript,但不会弹出 GUI 密码提示。然后,该应用程序根据我的需要静默运行,并运行脚本 script_name.sh,该脚本又运行许多其他脚本并将其他资源文件从(来自 myapp.app/Contents/Resources/)复制到系统目录等。

作为记录,我需要它以这种方式运行,因为我正在使用 Munki 部署此应用程序,并希望它在使用安装后脚本安装后自动静默运行:

#!/bin/bash
open -b "com.company.bundleidformyapp"
exit 0
于 2013-09-04T21:37:28.360 回答