2012-05-10 171 views
12

我需要將一個.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這樣的命令。

是否有更簡單或更好的方式將鑰匙串添加到搜索列表中?

回答

2

您使用的是哪種自動化工具?我在使用tomcat下的Jenkins構建iPhone時遇到了類似的問題。我嘗試在shell腳本中添加鑰匙串,但最好證明它非常脆弱。

最後,我通過將構建過程切換爲通過LaunchAgents而不是LaunchDemons來解決問題。這樣構建工具在用戶環境中運行,事情變得更可靠。

這是你的可能嗎?如果是這樣,我可以提供更多的細節。

+0

它基本上也是jenkins中的shell腳本,但它仍然是一個普遍的問題。 – amrox

+0

Jenkins在哪個容器中運行? Tomcat的?它的啓動腳本是什麼? –

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. 
4

這是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