如何在不提示输入密码的情况下通过AppleScript运行具有管理员权限的shell脚本?

时间:2014-03-04 01:57:46

标签: macos shell applescript

我希望我的AppleScript应用程序运行带有sudo的Python脚本,但我不希望应用程序提示用户输入密码(我们的用户没有sudo权限)。

Python脚本已适当地添加到/etc/sudoers文件中(ALL ALL=NOPASSWD: /path/to/script.py)。在终端中,我可以做(作为常规,非特权用户):

$ sudo ./script.py

它运行得非常好。但是在AppleScript中尝试这样做时:

do shell script "sudo ./script.py"

你当然得到“sudo:no tty present and no askpass program specified”错误。但是如果你改成它:

do shell script "./script.py" with administrator privileges

AppleScript坚持要求提供一个弹出窗口来询问密码。我也尝试使用管道将空密码传递给sudo:

do shell script "echo '' | sudo -S ./script.py"

但这也行不通。 (我认为它首先尝试单独运行sudo然后传递命令,这将无效,因为用户没有sudo权限!)

我需要一个AppleScript将使用sudo运行Python脚本的解决方案。出于安全原因,我希望普通用户保持脚本不可读和不可执行,并且只能通过AppleScript执行。 (我知道,假设用户可以调用sudo script.py并且它会运行,但这是假设他们甚至知道sudoers;我试图尽可能保持它尽可能安全,但仍然可用。)

我仍然是AppleScript的新手,所以任何帮助都将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

当我将ALL ALL=NOPASSWD: /Users/myusername/a添加到sudoers并运行echo $'#!/bin/bash\nsay $(ls ~root|head -n1)'>~/a;chmod +x ~/a时,do shell script "sudo ~/a"以root身份运行该脚本而无需密码。

我猜测问题是您指定了do shell script "sudo ./script.py"之类的路径。请尝试使用do shell script "sudo ~/script.py"do shell script的默认工作目录是/,而不是~/