Добавить брелок в список поиска?
Мне нужно добавить файл.keychain в список поиска ключей для некоторых автоматизированных инструментов сборки. В настоящее время я использую команду security list-keychains
:
list-keychains [-h] [-d user|system|common|dynamic] [-s [keychain...]]
Display or manipulate the keychain search list.
Эта команда позволяет вам установить весь список поиска по цепочке ключей, но это не дает возможности просто добавить еще одну цепочку ключей. Поэтому добавление брелка становится двухэтапным процессом.
- Запуск списка-цепочек ключей и анализ вывода
- Затем сделайте что-нибудь вроде
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
чтобы вырезать их.