我需要使用 sudo 执行命令,并希望显示一个对话框窗口供用户输入其凭据。使用 Applescript 自定义提示的尝试简直令人难以忍受,并且使用内置的“以管理员权限执行 shell 脚本”不允许自定义窗口,因此用户知道请求来自何处。
当然,有一种方法可以显示一个窗口,让用户输入他们的凭据并将值发送回 sudo 以执行命令?cocoasudo看起来很有希望,但它还在提示窗口中写入“cocoasudo”,我需要将其替换为我的应用程序的名称。有没有人找到实现这种功能的解决方案?
我需要使用 sudo 执行命令,并希望显示一个对话框窗口供用户输入其凭据。使用 Applescript 自定义提示的尝试简直令人难以忍受,并且使用内置的“以管理员权限执行 shell 脚本”不允许自定义窗口,因此用户知道请求来自何处。
当然,有一种方法可以显示一个窗口,让用户输入他们的凭据并将值发送回 sudo 以执行命令?cocoasudo看起来很有希望,但它还在提示窗口中写入“cocoasudo”,我需要将其替换为我的应用程序的名称。有没有人找到实现这种功能的解决方案?
构建自定义窗口超出了基本 applescript 的范围。如果需要,您将需要扩展您的编程技能。您需要学习如何利用 Apple 提供的工具来创建窗口等。底线是您需要学习 AppleScriptObjC 或 Objective-C/Cocoa API 以及如何在 Xcode 中使用它们。
话虽如此,如果您不喜欢学习新东西,那么请使用您拥有的工具。像这样的东西会起作用。您可以自定义图标、按钮、文本等。您甚至可以在输入密码时隐藏答案以保护用户。无需进一步学习,您就可以使用 Applescript 做很多事情......
display dialog "OSAScript will need an Admin User name and password in order to make your changes." & return & return & "Please enter an admin username." default answer "" with icon 2
set username to text returned of result
display dialog "OSAScript will need an Admin User name and password in order to make your changes." & return & return & "Please enter an admin password." default answer "" with icon 2 with hidden answer
set pssword to text returned of result
do shell script "osascript -e \"return 1\"" user name username password pssword with administrator privileges
此外,请考虑一旦您使用 sudo 进行身份验证,接下来的五分钟内您无需再次提供密码。这并不能直接解决您的问题,但它为您与用户交互的方式提供了更多选择。sudo 的 -n 选项可防止它提示输入密码(命令运行,或 sudo 退出并出现错误)。
您可以将 -n 与 -A 选项结合使用,这会导致 sudo 运行一个单独的程序,该程序的唯一工作是收集和输出密码。那会让你使用 AppleScript 更好地做你想做的事吗?
如果您熟悉 Javascript,则可以使用sudo-prompt
Node 的模块来运行您的命令,sudo
并在必要时使用对话框窗口进行提示。该对话框是操作系统提出的本机提示,因此用户的密码永远不会暴露给您的应用程序。您还可以在 macOS 上提供应用程序的名称和图标。该模块也适用于 Windows 和 Linux。