将钥匙串添加到搜索列表中?

时间:2012-05-10 17:04:26

标签: macos keychain

我需要将一个.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}
  3. 之类的操作

    虽然这有效但看起来过于复杂并引入了竞争条件。

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

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

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

您使用的是哪种自动化工具?我在tomcat下使用Jenkins为iPhone构建时遇到了类似的问题。我尝试在shell脚本中添加钥匙串,但最好证明它非常好看。

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

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

答案 2 :(得分:2)

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

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

security list-keychains -d user的输出中直接管道的问题是它用引号括起结果。解决方案使用sed将其删除。

答案 3 :(得分: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.