如何使用终端在 OS X 中解锁系统钥匙串

问题描述 投票:0回答:1

我的系统钥匙串中有私钥和证书,我想使用 CodeSign 访问它,因此需要解锁。

如果我尝试使用下面的脚本解锁登录钥匙串,那么没问题

security unlock-keychain -p password login.keychain

但是如果我对 system.keychain 使用相同的语法,则会收到此错误 security: SecKeychainUnlock 您输入的用户名或密码不正确。

security unlock-keychain -p password /Library/Keychains/System.keychain

从中我可以看到,无法在语法中输入用户名。

我的意图是在代码签名构建时解锁钥匙串,这样我就不会收到如下提示。在jenkins中的代码签名事件的情况下,我会收到类似“用户交互”的错误不允许

我知道这个问题可以通过授予钥匙串中所有应用程序的访问权限来解决,但我打算通过脚本本身来做到这一点。

任何帮助表示赞赏!

ios shell jenkins keychain codesign
1个回答
0
投票

从各种来源(123)收集数据,似乎在使用

security unlock-keychain
命令解锁系统钥匙串时,钥匙串通常不需要密码或用户名。 它依赖于系统密码。

这就是为什么当您尝试使用

security unlock-keychain -p password /Library/Keychains/System.keychain
使用密码解锁系统钥匙串时,它会失败,因为它需要用户名-密码组合,这在这种情况下不适用。

因此,为了避免在 Jenkins 中的代码签名事件期间出现“不允许用户交互” 错误消息,您可以授予 Jenkins 用户访问系统钥匙串中的私钥和证书的权限,而无需“手动干预”。

根据上面共享的参考资料,这是通过 UI 逐步实现此目的的步骤:

    在运行 Jenkins 的计算机上打开
  • Keychain Access
  • 在系统钥匙串中找到私钥和证书。
  • 右键单击私钥并选择
  • Get Info
  • Access Control
     选项卡中,单击 
    +
     符号添加新条目。
  • 在出现的对话框中,搜索
  • jenkins
     并将其添加到列表中。
  • 确保
  • jenkins
    条目具有适当的权限(例如:“允许所有应用程序访问此项目”)。
    
通过授予 Jenkins 用户对私钥和证书的访问权限,您将确保 Jenkins 可以在代码签名事件期间无需手动干预即可访问它们。

如果您仍然喜欢使用脚本来解锁系统钥匙串(如您所评论的),您可以考虑在脚本中使用

sudo

 命令(参见参考资料),以提升权限执行 
security unlock-keychain
 命令。 

注意:始终牢记在脚本中存储密码/密码短语的安全隐患...

© www.soinside.com 2019 - 2024. All rights reserved.