2015-02-23 59 views
0

我试图让非管理员用户在需要root权限的共享环境中运行脚本。我打算构建一个AppleScript或Automator应用程序来调用期望以传递登录凭据(是的,我知道危险,它将全部只能执行)。然而,我得到的登录工作,但我试图运行的shell脚本似乎并没有执行,因为它立即返回。我是新的期望,我相信我的脚本中有一个错误。想法任何人?使用期望在OS X上运行shell脚本作为管理员

#!/usr/bin/expect 
set timeout 60 
set password "MyPass" 
set command "bash /Applications/mampstack-5.4.36-0/ctlscript.sh start" 
eval spawn login admin 
expect "assword:" 
send "$password\n" 
expect "$" 
send "$command\n" 
expect "$" 
send exit 
expect "$" 
send exit 
+0

期望真的不是这份工作的正确工具。如果你有root用户,你可以在'/ etc/sudoers'中放入一行,以允许用户根据需要运行这个脚本,而不需要任何密码。否则,您将以纯文本形式向全世界公开您的密码,除非您跳过单独的特权升级箍环以防止用户阅读脚本文本。 – 2015-02-23 20:22:22

+0

如果你真的想要一个期望的答案,也期望脚本使用TCL语法,而不是bash语法,所以这应该被标记'tcl',而不是'bash'。 – 2015-02-23 22:08:24

+0

...但是作为一般规则,以一种完全不需要密码的方式进行操作总是比自动输入密码更好。 – 2015-02-23 22:14:40

回答

2

不要这样做。相反,编辑/etc/sudoers添加以下行(或者,在Mac OS的默认配置,你可以创建/etc/sudoers.d一个文件,内容如下):

# allow use by GUI apps (AppleScript, Automator), which don't have a TTY 
Defaults:%staff !requiretty 

# on MacOS, all humans are members of the staff group 
%staff ALL=(ALL) NOPASSWD: /Applications/mampstack-5.4.36-0/ctlscript.sh start 

...那么,有你的AppleScript和Automator的代码运行:

sudo -u admin /Applications/mampstack-5.4.36-0/ctlscript.sh start 

......根本不需要密码。

+0

我认为这是最伟大的(阅读:简单和优雅)的想法!但是,我收到消息“不允许root执行”它需要由具有管理员权限的用户运行,但不是root用户。我仍然需要以管理员身份登录。 – Arana 2015-02-24 19:49:33

+0

@Arana,然后使用'sudo -u the_username /Applications/mampstack-5.4.36-0/ctlscript.sh start',替换'the_username'的实际目标用户名。 – 2015-02-24 20:52:09

+0

太棒了!现在一切正常。我甚至添加了状态并停止,然后将它们放到Automator Applescript选择器中,并将它们传递给运行shell脚本,现在用户可以选择它们与ctlscript的交互方式!非常感谢Charles! – Arana 2015-02-25 19:49:25