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

Tengo un script que envía ssh de forma remota a una Mac. El guión 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 anterior parece funcionar, pero luego, cuando enumero los llaveros, el llavero de inicio de sesión aún no está allí y mi secuencia de comandos falla al intentar firmar mi código porque no puede acceder a 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 10 de octubre de 2016: cambié la autenticación ssh de contraseña a 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: SecKey API devolvió: -25308 de codesign. Esto resultó ser un error de permisos. Cuando lo probé en el host en una terminal, apareció un cuadro de diálogo del llavero que me pedía que permitiera el acceso.

El llavero podría desbloquearse, pero iba a solicitar una interfaz de usuario para pedir permiso. Estoy atrapado en un problema similar al igual que stackoverflow.com/questions/39868578/… . ¿Encuentras alguna solución o solución?

Respuestas (1)

Su llavero de inicio de sesión no parece estar en la lista de búsqueda, es decir, cuando lo marcó, solo muestra el llavero del sistema dos veces. Sin 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 "Interacción del usuario no permitida". Esto es típico si está intentando firmar su aplicación a través de SSH (oa través de Jenkins).

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

Debe realizar un comando de seguridad para habilitar el codiseño de su 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 un script compatible con Jenkins/SSH "completo" para firmar su 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

Gracias a Bochun Bai por pasar 3 semanas con el soporte de Apple para encontrar la solución al problema -25308 y publicarlo en https://sinofool.net/blog/archives/322

Esteban, gracias por esa explicación. Mi problema original se resolvió cuando cambié a la clave RSA en lugar de una contraseña en SSH, pero estoy agradecido de finalmente entender lo que está sucediendo y aprender métodos para depurar problemas similares en el futuro, si Apple realiza cambios relacionados con la seguridad.
Gracias, Stephen, en mi caso fue errSecInternalComponent on codesign on jenkins build. security set-key-partition-list¡Hizo el truco!