No se puede desbloquear el llavero de inicio de sesión en sierra en ssh

6

Tengo un script que controla a ssh en una Mac. El script original, que funcionó en El Capitán, desbloquearía el llavero con esto:

security unlock-keychain -p mypassword

El comando anterior da un error en Sierra, así que lo actualicé a esto:

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

El comando de arriba parece funcionar pero luego, cuando enumero los llaveros, el llavero de inicio de sesión todavía no está allí y mi secuencia de comandos falla al intentar firmar mi código porque no puede obtener los certificados.

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

Todo esto funciona perfectamente en una ventana de terminal en el host, pero necesito que funcione de forma remota en SSH.

Gracias por cualquier ayuda o sugerencia.

Actualización del 10 de octubre de 2016: cambié la autenticación ssh de la contraseña a la clave rsa y comenzó a funcionar. Después de que pude acceder al llavero de inicio de sesión, comencé a recibir un error en el shell ssh: La API de SecKey devolvió: -25308 desde codesign. Esto resultó ser un error de permisos. Cuando lo probé en el host en un terminal, apareció un diálogo del llavero que me pedía que permitiera el acceso.

    
pregunta mw2785 04.10.2016 - 21:53

1 respuesta

8

Su llavero de inicio de sesión no parece estar en la lista de búsqueda, es decir, cuando lo verificó, solo muestra el llavero del sistema dos veces. No hay llavero de inicio de sesión:

(~)$ 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"

Puede usar el comando de seguridad para buscar el código de error -25308. En este caso, dice "No se permite la interacción del usuario". Esto es típico si está intentando firmar su aplicación a través de SSH (o a través de Jenkins).

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

Necesitas ejecutar un comando de seguridad para habilitar la firma de códigos de tu aplicación a través de un shell no interactivo:

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

Aquí hay una secuencia de comandos amigable de Jenkins / SSH "completa" para firmar tu aplicación:

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

Comuníquese con Bochun Bai por pasar 3 semanas con el soporte de Apple para encontrar la solución al problema -25308 y publicarlo en enlace

    
respondido por el Stephen Quan 31.05.2017 - 06:17

Lea otras preguntas en las etiquetas