9 votos

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

Tengo un script que remite ssh a un Mac. El script original, que funcionaba en El Capitán, desbloqueaba el llavero con esto:

security unlock-keychain -p mypassword

El comando anterior da 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 todavía no está allí y mi script falla al intentar firmar mi código porque no puede llegar 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 remotamente 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 empezó a funcionar. Después de que pude acceder al llavero de inicio de sesión, comencé a obtener un error en el shell ssh: La API SecKey devolvió: -25308 de codesign. Esto resultó ser un error de permisos. Cuando lo intenté en el host en una terminal, apareció un diálogo del llavero pidiéndome que permitiera el acceso.

0 votos

El llavero podría ser desbloqueado, pero iba a pedir una interfaz de usuario para pedir permiso. Estoy siendo atrapado en el tema similar al igual que stackoverflow.com/questions/39868578/ . ¿Ha encontrado alguna solución?

17voto

Stephen Quan Puntos 131

Su llavero de inicio de sesión no aparece en la lista de búsqueda, es decir, cuando lo ha comprobado, sólo 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 utilizar 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ás tratando de firmar tu 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 hacer un comando de seguridad para permitir la codificación 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 un "completo" Jenkins / SSH amigable script 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

Un saludo 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

0 votos

Stephen, gracias por la explicación. Mi problema original se resolvió cuando me cambié a la clave RSA en lugar de una contraseña en SSH, pero estoy agradecido de entender por fin lo que está pasando, además de aprender métodos para la depuración de problemas similares en el futuro - si y cuando Apple hace cambios relacionados con la seguridad.

0 votos

Gracias, Stephen, en mi caso fue errSecInternalComponent en codesign en jenkins construir. security set-key-partition-list ha funcionado.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X