Bash 在OS X上使用expect以管理员身份运行shell脚本
我试图让非管理员用户在需要root权限的共享环境中运行脚本。我打算构建一个调用expect的AppleScript或Automator应用程序来传递登录凭据(是的,我知道其中的危险,它将只执行)。然而,我让登录工作,但我试图运行的shell脚本似乎没有执行,因为它会立即返回。我是新来的,我相信我的剧本中有一个错误。有人吗Bash 在OS X上使用expect以管理员身份运行shell脚本,bash,shell,expect,osx-yosemite,Bash,Shell,Expect,Osx Yosemite,我试图让非管理员用户在需要root权限的共享环境中运行脚本。我打算构建一个调用expect的AppleScript或Automator应用程序来传递登录凭据(是的,我知道其中的危险,它将只执行)。然而,我让登录工作,但我试图运行的shell脚本似乎没有执行,因为它会立即返回。我是新来的,我相信我的剧本中有一个错误。有人吗 #!/usr/bin/expect set timeout 60 set password "MyPass" set command "bash /Applications/m
#!/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
不要那样做。相反,编辑
/etc/sudoers
以添加以下行(或者,在MacOS的默认配置中,您可以在/etc/sudoers.d
中创建一个包含以下内容的文件):
…然后,运行AppleScript或Automator代码:
sudo -u admin /Applications/mampstack-5.4.36-0/ctlscript.sh start
…完全不需要密码。expect确实不是此项工作的合适工具。如果您有root用户,则可以在
/etc/sudoers
中添加一行,以允许用户以所需用户的身份运行此脚本,而无需任何密码。否则,您将以明文形式向世界公开您的密码,除非您跳过一个单独的权限提升环,以使用户无法读取脚本的文本。如果您真的需要expect答案,那么--expect脚本使用TCL语法,而不是bash语法,因此应将其标记为TCL
,不是bash
…但一般来说,做事情时不需要密码总比自动输入密码好。我认为这是最伟大的(简单而优雅的)想法!但是,我得到消息“不允许根用户执行”,它需要由具有管理员权限的用户运行,但不是根用户。我仍然需要以管理员身份登录。@Arana,然后使用sudo-u用户名/Applications/mampstack-5.4.36-0/ctlscript.sh start
,将实际目标用户名替换为用户名
。太棒了!现在一切都好了。我甚至添加了status和stop,然后将它们放入Automator Applescript选择器,并将它们传递给运行shell脚本,现在用户可以选择如何与脚本交互!非常感谢查尔斯!!
sudo -u admin /Applications/mampstack-5.4.36-0/ctlscript.sh start