Impossibile sbloccare il portachiavi di login su sierra in ssh

7

Ho uno script che rimuove ssh in un Mac. La sceneggiatura originale, che ha funzionato su El Capitan, sbloccherebbe il portachiavi con questo:

security unlock-keychain -p mypassword

Il comando sopra dà errore su Sierra, quindi l'ho aggiornato con questo:

security unlock-keychain -p mypassword ~/Library/Keychains/login.keychain

Il comando sopra sembra funzionare ma quando elenco i portachiavi, il portachiavi di accesso non è ancora presente e il mio script non riesce a provare a firmare il mio codice perché non può accedere ai certificati.

(~)$ security list-keychains
"/Library/Keychains/System.keychain"
"/Library/Keychains/System.keychain"

Tutto funziona perfettamente in una finestra di terminale sull'host, ma ho bisogno che funzioni in remoto in SSH.

Grazie per qualsiasi aiuto o suggerimento.

Aggiornamento 10 ottobre 2016: ho modificato l'autenticazione ssh dalla password alla chiave rsa e ha iniziato a funzionare. Dopo aver potuto accedere al portachiavi di accesso, ho iniziato a ricevere un errore nella shell ssh: API SecKey restituita: -25308 da codesign. Questo si è rivelato un errore di autorizzazione. Quando l'ho provato sull'host in un terminale, una finestra di dialogo dal portachiavi è comparso chiedendomi di consentire l'accesso.

    
posta mw2785 04.10.2016 - 21:53
fonte

1 risposta

8

Il tuo portachiavi di accesso non sembra essere nella lista di ricerca, cioè quando lo hai controllato, mostra solo il portachiavi del sistema due volte. Nessun portachiavi di accesso:

(~)$ security list-keychains
"/Library/Keychains/System.keychain"
"/Library/Keychains/System.keychain"
(~)$ security list-keychains -d user -s login.keychain
(~)$ security list-keychains
"/Users/USERNAME/Library/Keychains/login.keychain-db"
"/Library/Keychains/System.keychain"

È possibile utilizzare il comando di sicurezza per cercare il codice di errore -25308. In questo caso, dice "L'interazione dell'utente non è consentita". Questo è tipico se stai cercando di firmare la tua app tramite SSH (o tramite Jenkins).

security error -25308
Error: 0xFFFF9D24 -25308 User interaction is not allowed.

È necessario eseguire un comando di sicurezza per abilitare la codifica della propria applicazione attraverso una shell non interattiva:

security set-key-partition-list -S apple: -k <Password> -D <Identity> -t private <your.keychain>

Ecco uno script "completo" di Jenkins / SSH per firmare la tua app:

MY_KEYCHAIN="temp.keychain"
MY_KEYCHAIN_PASSWORD="secret"
CERT="certificate.p12"
CERT_PASSWORD="certificate secret"

security create-keychain -p "$MY_KEYCHAIN_PASSWORD" "$MY_KEYCHAIN" # Create temp keychain
security list-keychains -d user -s "$MY_KEYCHAIN" $(security list-keychains -d user | sed s/\"//g) # Append temp keychain to the user domain
security set-keychain-settings "$MY_KEYCHAIN" # Remove relock timeout
security unlock-keychain -p "$MY_KEYCHAIN_PASSWORD" "$MY_KEYCHAIN" # Unlock keychain
security import $CERT -k "$MY_KEYCHAIN" -P "$CERT_PASSWORD" -T "/usr/bin/codesign" # Add certificate to keychain
CERT_IDENTITY=$(security find-identity -v -p codesigning "$MY_KEYCHAIN" | head -1 | grep '"' | sed -e 's/[^"]*"//' -e 's/".*//') # Programmatically derive the identity
CERT_UUID=$(security find-identity -v -p codesigning "$MY_KEYCHAIN" | head -1 | grep '"' | awk '{print $2}') # Handy to have UUID (just in case)
security set-key-partition-list -S apple-tool:,apple: -s -k $MY_KEYCHAIN_PASSWORD -D "$CERT_IDENTITY" -t private $MY_KEYCHAIN # Enable codesigning from a non user interactive shell
### INSERT BUILD COMMANDS HERE ###
security delete-keychain "$MY_KEYCHAIN" # Delete temporary keychain

Esamina a Bochun Bai per 3 settimane con il supporto Apple per trovare la soluzione al problema -25308 e pubblicarlo su link

    
risposta data 31.05.2017 - 06:17
fonte

Leggi altre domande sui tag