macos - "User interaction is not allowed"尝试使用 codesign 对 OSX 应用程序进行签名

标签 macos ssh jenkins code-signing

我们的自动化构建在 Jenkins 上运行。构建本身在从属设备上运行,从属设备通过 SSH 执行。

我收到错误:

00:03:25.113 [codesign-app] build/App.app: User interaction is not allowed.

我已经尝试了迄今为止在其他帖子中看到的所有建议:

  • 在签名之前立即使用 security unlock-keychain 来解锁钥匙串(keychain)。
  • 将签名 key 移至其自己的钥匙串(keychain)中。
  • 将签名 key 移至登录钥匙串(keychain)中。
  • 将签名 key 移至系统钥匙串(keychain)中。
  • 手动将 list-keychains 设置为仅包含该 key 的钥匙串(keychain)。

在所有情况下,我都会遇到相同的错误。

为了诊断问题,我尝试在本地终端上运行“安全解锁钥匙串(keychain)”命令,发现它实际上并没有解锁钥匙串(keychain) - 如果我在“钥匙串(keychain)访问”中查看,锁定符号仍然是那里。无论我在命令行上传递密码还是让它提示我输入密码,都是这种情况。使用 GUI 解锁同一个钥匙串(keychain)将提示我输入密码,然后解锁。此外,如果我运行“security lock-keychain”,我确实在运行命令后立即看到 key 锁。这让我觉得解锁钥匙串(keychain)实际上不起作用。我在 Lion(我们用于构建奴隶)和 Mavericks(我正在开发)上经历了相同的行为。

接下来,我尝试将 -v 添加到所有安全命令中:

list-keychains "-d" "system" "-s" "/Users/tester/.secret/App.keychain"
Listing keychains to see if it was added: ((
        "/Library/Keychains/System.keychain"
))
unlock-keychain "-p" "**PASSWORD**" "/Users/tester/.secret/App.keychain"
build/App.app: User interaction is not allowed.

由此看来,列表钥匙串(keychain)似乎不起作用。也许两者都不起作用。 :/

有一个similar question here 。解决方案很有趣 - 在 launchctl 中将“SessionCreate”设置为 true。但我不是在主服务器上构建 - 我的构建过程是从从构建机器上的 SSH 启动的。也许有一种命令行方式可以执行 launchctl 在运行“SessionCreate”时所做的事情?

最佳答案

我也一直在为此奋斗。直到我尝试了 http://devnet.jetbrains.com/thread/311971 上的建议,一切都没有帮助。 。谢谢阿希什·阿格拉瓦尔!

通过 GUI 登录您的构建用户并打开钥匙串(keychain)访问。选择您的签名私钥,右键单击,选择“获取信息”,切换到“访问控制”选项卡,然后选择“允许所有应用程序访问此项目”。

access control tab

关于macos - "User interaction is not allowed"尝试使用 codesign 对 OSX 应用程序进行签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20205162/

相关文章:

go - cmd := exec. 命令 ("ssh", "ec2-user@publicip")退出权限被拒绝(公钥,gssapi-keyex,gssapi-with-mic)

jenkins - 如何获取自 Jenkins 上次构建以来的变更日志

android - Jenkins 构建错误 FileNotFound/Permission denied

xml - 是否可以从 Mac OS 使用 XSD 工具?

objective-c - NSSound 几个小时后停止工作

macos - git 对 Rstudio (OSX) 不可见的原因

mysql - ODBC + 通过 SSH 隧道的远程 MySQL

node.js - 将版本托管 Node 作为远程 SSH 脚本运行的问题

macos - brew install bind 失败并显示 "configure: error: OpenSSL was not found..."

docker - Jenkins:从奴隶推送到 ECR