2012-05-10 5 views
12

Ho bisogno di aggiungere un file .keychain all'elenco di ricerca dei miei portachiavi per alcuni strumenti di compilazione automatici. Attualmente sto usando security list-keychains comando:Aggiungi un portachiavi all'elenco di ricerca?

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

Questo comando di impostare l'intero elenco di ricerca portachiavi, ma non fornisce un modo per aggiungere semplicemente un altro portachiavi let. Quindi aggiungere un portachiavi diventa un processo in 2 fasi.

  1. Run list-portachiavi e analizzare l'output
  2. poi fare qualcosa di simile list-keychains -s ${existing_chains} ${new_keychain}

Anche se questo funziona, sembra troppo complicato e introduce una condizione di competizione.

Inoltre sembra che open my.keychain lo aggiunga all'elenco di ricerca, ma io tendo ad evitare di utilizzare comandi come open in ambienti di scripting o headless.

C'è un modo più semplice o migliore per aggiungere un portachiavi all'elenco di ricerca?

risposta

2

Quali strumenti automatici stai utilizzando? Ho avuto un problema simile con la creazione di iPhone con Jenkins sotto tomcat. Ho provato ad aggiungere keychains nello script della shell, ma si è rivelato al massimo flakey.

Alla fine, ho risolto il problema passando il nostro processo di compilazione in esecuzione tramite LaunchAgent anziché LaunchDemons. In questo modo gli strumenti di costruzione vengono eseguiti nel contesto dell'utente e le cose sono diventate molto più affidabili.

Questa è una possibilità per voi? Se è così, posso fornire maggiori dettagli.

+0

E 'fondamentalmente per uno script di shell a Jenkins, anche, ma è ancora una domanda di carattere generale. – amrox

+0

In quale container è in esecuzione Jenkins? Tomcat? E qual è lo script di lancio per questo? –

0

non c'è un modo migliore che io sappia - ma sembra che forse create-keychain farà ciò che si vuole:

security create-keychain -h

rendimenti:

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

E 'il 2017 e su macos 10.12.4 security create-keychain continua a non aggiungere un nuovo portachiavi all'elenco di ricerca. Ecco il mio script per aggiungere e distruggere portachiavi temporanea passo per passo:

#!/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