如何在Xcode 4中的Run Script构建阶段中使用sudo?

时间:2011-07-23 21:10:40

标签: xcode build xcode4 sudo

我需要在Xcode 4的Run Script构建阶段使用sudo在脚本内执行命令。但是,编译器抱怨:

  

sudo:没有tty存在且没有指定askpass程序

任何人都有这个问题的聪明解决方案吗?

7 个答案:

答案 0 :(得分:13)

一种解决方案是将sudo密码放在可执行shell脚本中,如下所示:

#!/bin/bash
echo thesudopassword

此shell脚本可能称为password.sh

然后,设置环境变量SUDO_ASKPASS = password.sh

设置完成后,可以将-A选项传递给sudo。此选项使用ASKPASS程序获取sudo密码。 ASKPASS程序只需要将密码写入stdout。

所以,例如,

sudo -A ditto -V /tmp/testserver.dst /

这显然是一种相当不安全的解决方案,但确实有效。

答案 1 :(得分:6)

尚未提出的两个想法,两者都可能比目前接受的答案更好/更安全:

第一个选项是将需要在root文件中运行的脚本部分放在脚本文件(.sh或其他内容)中,然后将其作为root用户设置为setuid:chmod go-w,+sx scriptfile,{{1} }。这意味着脚本将自动以root身份运行,这可以避免您需要进行身份验证才能运行它(只是为了更改它)。只要其操作不受用户输入的影响,这应该是非常安全的。 (当然,如果你创建一个带有输入参数的脚本并将其删除或运行它,或者对其进行大部分操作,那么是安全的。)

第二个选项是使用applescript(可能通过osascript)。 Applescript允许您sudo chown root scriptfile,它会弹出一个图形对话框,要求输入密码。

这些选项中的第一个对于自动化环境是有益的,尽管它可能不适合(例如)被检入SCM或被发送给另一个用户。第二个选项可以更好地使用它,但每次都需要输入密码,因此对于自动构建脚本不起作用。

答案 2 :(得分:2)

此问题的另一个解决方案是修改sudoers文件并将其添加到其中,并声明永远不会要求您提供sudo密码。要做到这一点非常简单:

运行:

sudo visudo

在“用户权限规范”部分中添加一行类似于

的行
youraccountname ALL=(ALL) NOPASSWD: ALL

当然,这可能是一件危险的事情,所以要小心。我建议在走这条路之前阅读sudoers和visudo的手册页。

答案 3 :(得分:0)

经过大量搜索,我发现了以下解决方案。

https://forum.juce.com/t/build-script-for-automatically-moving-built-aus-into-components-folder-xcode/13112

摘要

  1. 创建钥匙串并将您的管理员密码存储在钥匙串中
  2. 创建一个脚本,该脚本使用/ usr / bin / security来访问密码在运行脚本中,
  3. 设置ASK_PASS env变量,并将-A选项与sudo一起使用

答案 4 :(得分:0)

您可以使用以下命令直接以管理员身份运行命令(将echo YourCommandHere > /tmp/hello更改为命令):

osascript -e 'do shell script "sudo echo YourCommandHere > /tmp/hello " with administrator privileges'

或使用以下命令在源目录中运行脚本:

osascript -e 'do shell script "bash -x $SOURCE_ROOT/MyAdminScript.sh 1>/tmp/build-log 2>/tmp/build-log.err" with administrator privileges'

这将运行脚本并将其输出记录到/ tmp / build-log和/tmp/build-log.err

有关脚本中的有用变量,请参见https://help.apple.com/xcode/mac/8.0/#/itcaec37c2a6

答案 5 :(得分:-1)

您还可以执行XCode,使用sudo从终端为项目提供参数:

sudo /Developer/Applications/Xcode.app/Contents/MacOS/Xcode /path/to/your/project.xcodeproj

这是我能想到的最简单的解决方案,但可能存在一些缺点,因为您将以root身份执行XCode。

答案 6 :(得分:-4)

无需在任何地方写入您的sudo密码。只需打开终端窗口并输入

即可
$ sudo echo "hello"

一旦你输入了你的密码,它会好一段时间 - 不确定多长时间 - 由Xcode产生的shell将继承这个权限。

如果您稍后再次收到“no tty present”消息,请重复该过程