Tre*_*kaz 140 macos ssh code-signing jenkins
我们的自动构建在Jenkins上运行.构建本身在从属服务器上运行,从服务器通过SSH执行.
我收到一个错误:
00:03:25.113 [codesign-app] build/App.app: User interaction is not allowed.
Run Code Online (Sandbox Code Playgroud)
我已经尝试了迄今为止我在其他帖子中看到的所有建议:
在所有情况下,我都会得到同样的错误.
为了诊断问题,我尝试在我的本地终端上运行"security unlock-keychain"命令,发现它实际上并没有解锁钥匙串 - 如果我查看Keychain Access,锁定符号仍然存在.无论我是在命令行上传递密码还是让它提示我,都是这种情况.使用GUI解锁相同的钥匙串将提示我输入密码然后解锁.另外,如果我运行"security lock-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.
Run Code Online (Sandbox Code Playgroud)
从这看起来,列表 - 钥匙链似乎是不起作用的.也许都不行.:/
这里有一个类似的问题.解决方案很有趣 - 在launchctl中将"SessionCreate"设置为true.但我不是在master上构建 - 我的构建过程是从一个slave构建机器上的SSH启动的.也许有一种命令行方式可以在运行"SessionCreate"时执行launchctl正在执行的操作?
bma*_*ter 204
我也一直在打这个.在我尝试http://devnet.jetbrains.com/thread/311971上的建议之前没有任何帮助.谢谢ashish agrawal!
通过GUI登录构建用户并打开Keychain Access.选择您的签名私钥,右键单击,选择"获取信息",切换到"访问控制"选项卡,然后选择"允许所有应用程序访问此项".
Tre*_*kaz 77
好吧,我想我今天可以回答我自己的问题了,因为在刺了两天半之后,我尝试过的其中一件事似乎已经奏效了.我现在要退出它并希望它继续工作.
从本质上讲,它似乎归结为-d system
不实际工作.因此,围绕这里的其他问题的许多答案应该更新以反映这一点.
security -v list-keychains -s "$KEYCHAIN" "$HOME/Library/Keychains/login.keychain"
security list-keychains # so we can verify that it was added if it fails again
security -v unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN"
codesign --sign "$SIGNER_IDENTITY" --force --signature-size 9600 \
--resource-rules src/AppResourceRules.plist --timestamp --verbose \
"$APP"
Run Code Online (Sandbox Code Playgroud)
yon*_*nix 18
没有其他答案对我有用.
最后救了我的是这篇文章
总而言之,这可能是由默认超时5分钟引起的,这将在长时间构建后触发此错误.
修理:
security set-keychain-settings -t 3600 -l ~/Library/Keychains/login.keychain
Run Code Online (Sandbox Code Playgroud)
Zhe*_*lov 16
尝试调用security unlock-keychain
并codesign
作为一行命令.这对我有帮助.就像是:
security unlock-keychain -p <password> /Users/<user>/Library/Keychains/login.keychain && codesign --force --verify --verbose --sign "<certificate id>" <app name>
Run Code Online (Sandbox Code Playgroud)
Cam*_*mer 10
导入证书并以编程方式使其与Codesign结合使用,无需使用登录或系统钥匙串,也无需向Codesign的某些上帝祈祷。您只需要设置正确的权限即可。我建议创建一个专门用于代码签名的新钥匙串。
这些天来codesign
不产生errSecInternalComponent
您需要正确的分区列表(ACL)。我将逐步执行以下步骤:
security create-keychain -p "${KEYCHAIN_PASSWORD}" "${KEYCHAIN_NAME}"
Run Code Online (Sandbox Code Playgroud)
此时,钥匙串已解锁,但不会出现在中Keychain Access
。
security list-keychains -s "${KEYCHAIN_NAME}" "${OLD_KEYCHAIN_NAMES[@]}"
Run Code Online (Sandbox Code Playgroud)
将新的钥匙串添加到列表中。如果您不首先从中获取原始列表,则将list-keychains
不再包含login.keychain
在搜索列表中。
security unlock-keychain -p "${KEYCHAIN_PASSWORD}" "${KEYCHAIN_NAME}"
Run Code Online (Sandbox Code Playgroud)
如果您在上面创建了钥匙串,那么这是多余的,但是如果钥匙串已经存在,则有必要。
security set-keychain-settings "${TESTING_KEYCHAIN}"
Run Code Online (Sandbox Code Playgroud)
通过不指定任何参数,这会将自动锁定超时设置为无限制,并删除睡眠时的自动锁定。
security import "${DIST_CER}" -P "${CERTIFICATE_PASSWORD}" -k "${KEYCHAIN_NAME}" -T /usr/bin/codesign
Run Code Online (Sandbox Code Playgroud)
导入证书,并codesign
通过该-T
选项提供访问权限。
security set-key-partition-list -S apple-tool:,apple: -s -k "${KEYCHAIN_PASSWORD}" "${KEYCHAIN_NAME}"
Run Code Online (Sandbox Code Playgroud)
这是许多人错过的要求。您可以使用dump-keychain查看macOS的功能。如果是代码签名,则需要apple:
和apple-tool:
。-s
指签署证书。
对于任何CI型运行器或构建系统来说,一件非常重要的事情是确保launchd
正确启动该过程。确保您的plist包含<SessionCreate> </true>
。
如果不正确地将钥匙串的所有者与构建过程进行匹配,并确保创建了安全会话,则会令人头疼。从诊断上来说,您可以介绍list-keychains
并查看输出是否符合您的期望。
这是从launchd.plist
手册页:
SessionCreate <boolean>
此项指定应将作业派生到新的安全审核会话中,而不是上下文所属的默认会话。有关详细信息,请参见auditon(2)。
UserName <string>
此可选键指定用户以其身份运行作业。该密钥仅适用于已加载到特权系统域中的服务。
GroupName <string>
此可选键指定用于运行作业的组。该密钥仅适用于已加载到特权系统域中的服务。如果设置了UserName而没有设置GroupName,则该组将被设置为用户的主要组。
您可以使用以下方法查找签名证书哈希 find-identity
security find-identity -p codesigning -v
Run Code Online (Sandbox Code Playgroud)
/usr/bin/codesign --verbose=4 -f -s "$SIGNER_HASH" "$SIGNABLE"
Run Code Online (Sandbox Code Playgroud)
/usr/bin/codesign --verbose=4 -f -s "$SIGNER_HASH" --entitlements entitlements.xcent "$SIGNABLE"
Run Code Online (Sandbox Code Playgroud)
最后说明-如果您查看Xcode的工作方式,则将其设置CODESIGN_ALLOCATE
为使用Xcode而不是Xcode中包含的代码/usr/bin
。
export CODESIGN_ALLOCATE="$( xcrun --find codesign_allocate )"
Run Code Online (Sandbox Code Playgroud)
搜索路径设置为${PLATFORM_PATH}:${TOOLCHAIN_PATH}:${PATH}
,其中PLATFORM路径是给定目标SDK的/ usr / bin目录,而TOOLCHAIN_PATH是Xcode主机工具的/ usr / bin。
所以这是有效的命令.-A
是为了防止Mac问密码.导入system.keychain不需要GUI.
sudo security import <cert.p12> -k "/Library/Keychains/System.keychain" -P <passphrase> -A