我需要将一个.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
等命令。
是否有更简单或更好的方式将钥匙串添加到搜索列表中?
答案 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.