Добавить брелок в список поиска?

Мне нужно добавить файл.keychain в список поиска ключей для некоторых автоматизированных инструментов сборки. В настоящее время я использую команду security list-keychains:

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

Эта команда позволяет вам установить весь список поиска по цепочке ключей, но это не дает возможности просто добавить еще одну цепочку ключей. Поэтому добавление брелка становится двухэтапным процессом.

  1. Запуск списка-цепочек ключей и анализ вывода
  2. Затем сделайте что-нибудь вроде list-keychains -s ${existing_chains} ${new_keychain}

Хотя это работает, это кажется чрезмерно сложным и вводит условие гонки.

Также кажется, что open my.keychain добавит его в список поиска, но я open my.keychain избегать использования таких команд, как open в сценариях или безглавых средах.

Есть ли более простой или лучший способ добавить брелок в список поиска?

Ответ 1

Это 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

Ответ 2

Какие автоматические инструменты вы используете? У меня была аналогичная проблема с построением iPhone, используя Jenkins под tomcat. Я попытался добавить keychains в сценарий оболочки, но в лучшем случае он оказался очень пушистым.

В конце концов, я столкнулся с проблемой, переключив процесс сборки на LaunchAgents вместо LaunchDemons. Таким образом, инструменты сборки запускаются в пользовательском контексте, и все становится намного надежнее.

Возможно ли это для вас? Если да, я могу предоставить более подробную информацию.

Ответ 3

Нет лучшего способа, о котором я знаю - однако, похоже, что 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.

Ответ 4

Однострочная версия решения @mles выше:

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

Проблема с непосредственным конвейером в выходе пользователя security list-keychains -d user заключается в том, что он окружает результаты кавычками. Решение использует sed чтобы вырезать их.