12

我需要将一个 .keychain 文件添加到我的钥匙串搜索列表中以获取一些自动构建工具。目前我正在使用security list-keychains命令:

list-keychains [-h] [-d user|system|common|dynamic] [-s [keychain...]]
        Display or manipulate the keychain search list.

此命令让您设置整个钥匙串搜索列表,但它不提供简单添加另一个钥匙串的方法。所以添加钥匙串变成了一个两步的过程。

  1. 运行 list-keychains 并解析输出
  2. 然后做类似的事情list-keychains -s ${existing_chains} ${new_keychain}

虽然这可行,但它似乎过于复杂并引入了竞争条件。

此外,它似乎open my.keychain会将其添加到搜索列表中,但我倾向于避免open在脚本或无头环境中使用命令。

是否有更简单或更好的方法将钥匙串添加到搜索列表?

4

4 回答 4

9

上述@mles 解决方案的单行版本:

security list-keychains -d user -s $(security list-keychains -d user | sed -e s/\"//g) <new keychain>

在输出中直接管道的问题security list-keychains -d user是它用引号包围结果。解决方案用于sed剥离它们。

于 2018-04-04T00:29:36.407 回答
8

现在是 2017 年,在 macOS 10.12.4 上security create-keychain仍然没有将新的钥匙串添加到搜索列表中。这是我逐步添加和销毁临时钥匙串的脚本:

#!/bin/bash -e

uuid="$(uuidgen)"

echo "New Keychain name: $uuid"

keychains=$(security list-keychains -d user)

keychainNames=();

for keychain in $keychains
do
  basename=$(basename "$keychain")
  keychainName=${basename::${#basename}-4}
  keychainNames+=("$keychainName")
done

echo "User keychains on this machine: ${keychainNames[@]}";




read -p "Enter to create keychain"
security -v create-keychain -p test123 $uuid

read -p "Enter to add keychain to searchlist"
security -v list-keychains -s "${keychainNames[@]}" $uuid

read -p "Enter to unlock keychain"
security -v unlock-keychain -p test123 $uuid

read -p "Enter to import certificate"
security -v import build-assets/certficate.p12 -k $uuid -P certificate_password

read -p "Enter to delete keychain"
security -v delete-keychain $uuid
于 2017-05-23T15:07:43.240 回答
2

您正在使用哪些自动化工具?我在 Tomcat 下使用 Jenkins 为 iPhone 构建时遇到了类似的问题。我尝试在 shell 脚本中添加钥匙串,但事实证明它充其量是非常脆弱的。

最后,我通过将构建过程切换为通过 LaunchAgents 而不是 LaunchDemons 来解决这个问题。这样,构建工具在用户上下文中运行,事情变得更加可靠。

这对你来说有可能吗?如果是这样,我可以提供更多细节。

于 2012-05-16T18:04:30.653 回答
0

我知道没有更好的方法 - 但似乎可能create-keychain会做你想做的事:

security create-keychain -h

返回:

Usage: create-keychain [-P] [-p password] [keychains...]
    -p  Use "password" as the password for the keychains being created
    -P  Prompt the user for a password using the SecurityAgent
Use of the -p option is insecure
        Create keychains and add them to the search list.
于 2017-04-11T14:27:12.517 回答