打开OSX应用程序命令行解决方案绕过图形管理员密码

时间:2013-09-04 18:15:21

标签: macos bash applescript automator

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

启动

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 for OSX提供GUI密码提示的应用程序?或者有更好的方法我应该执行主脚本而不是do shell script (quoted form of myCommand) with administrator privileges

3 个答案:

答案 0 :(得分: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会这样做。

答案 1 :(得分:1)

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

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

注意 :您必须将您提供该项目的名称放入代码中的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

答案 2 :(得分: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