当前位置: 首页 > 知识库问答 >
问题:

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

赫连俊悟
2023-03-14

我想让我的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:没有tty存在,也没有指定askpass程序”错误。但是,如果将其更改为:

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个答案

公羊伟志
2023-03-14

当我将 ALL ALL=NOPASSWD: /Users/myusername/a 添加到 sudoers 并运行 echo $'#!/bin/bash\nsay $(ls ~root|head -n1)'

我猜问题是您指定了像do外壳脚本"sudo./script.py"这样的路径。尝试使用do外壳脚本"sudo~/script.py"。默认工作目录是do外壳脚本/而不是~/

 类似资料:
  • 如果我把我的Applescript给另一个人,他们将不得不手动允许Applescript控制他们的计算机进入系统首选项,点击安全 如果没有添加applescript以便它可以控制,我会得到错误,“脚本编辑器不允许辅助访问。”

  • 问题内容: 我正在尝试在办公室笔记本电脑上安装JDK,但是它说我需要管理员权限。我只能在工作中使用自己的帐户。 没有管理员权限的情况下如何安装Java开发套件? 问题答案: 这是一种在没有管理员特权或没有管理员密码的情况下安装Java的解决方法。为此,您需要安装不需要管理员特权的cygwin。在utils中,确保您选择cabextract.exe进行安装。 启动Cygwin Bash外壳。 键入c

  • 问题内容: 我想知道在不提示输入密码的情况下执行数据库mysqldump的命令。 原因:我想运行一个cron作业,该作业每天执行一次mysqldump数据库的转储。因此,出现提示时,我将无法插入密码。 我该如何解决? 问题答案: 由于您正在使用Ubuntu,因此您所要做的只是在主目录中添加一个文件,这将禁用mysqldump密码提示。这是通过创建文件来完成的(权限需要为600)。 将此添加到.my

  • 我不是很清楚怎么说这个,但我正在做一个21点游戏,玩家收到2张牌后,他们得到一个Y/N选项来收到另一张牌。我将播放器的响应(Y/N)通过一个方法,该方法在输入无效输入时保持防弹和重新提示,然后将其返回到主代码,以便它将运行。下面是我的防弹方法的代码: } 我现在遇到的问题是防弹的工作,但是在一个Y/N放进去之后,玩家的卡没有显示出来。这是来自我的主要方法的代码: 当播放机输入无效时,程序要求播放机

  • 我有一个bash文件,从终端执行时可以正常工作。 注意:tensorflow\u p36是一个内置的conda环境,不需要从特定的目录调用。它可以从任何目录激活。我认为这是亚马逊深度学习AMIs的一个特点。 如果我用sudo运行这个bash脚本,它不会激活虚拟环境,并且在默认的python环境中工作。python文件只能在该虚拟环境中运行。 我在这里尝试了所有3个替代方案(rc.local、. c

  • 最近接了需求,需要在electron中,在调用exec时候使用管理员权限 electron child_process.exec() 如何使用管理员权限运行?

  • 除了为每一个用户设置权限,权限管理员 为连接及其数据库对象的权限提供另一查看方式。注意:只限于 MySQL、Oracle、PostgreSQL、SQL Server 和 MariaDB。 从用户的对象列表工具栏点击 权限管理员 并按照下列步骤进行: 在查看树展开节点直至到达目标对象。 选择对象并点击 添加权限 以打开窗口。 勾选用户以显示网格在右边的面板上。 在网格里,对照在 权限 列出的权限,勾

  • 除了在每个用户中设置权限,“权限管理员”提供另一种方式查看连接和其数据库对象的权限。 【注意】仅适用于 MySQL、Oracle、PostgreSQL、SQL Server、MariaDB 和 MongoDB。 若要添加权限,请在用户对象工具栏点击“权限管理员”并按照下列步骤: 在树视图展开节点直至到达目标对象。 选择对象并点击 “添加权限”以打开窗口。 在左侧窗格勾选用户。 在网格中,对照在“权