SSH, frases de contraseña, llaveros, no se pudo abrir una conexión con su agente de autenticación

Me sorprendería mucho si alguien tiene la respuesta a esto. He buscado en Google durante mucho tiempo, pero sin suerte.

Como desarrollador de iOS que pronto dará la bienvenida a un nuevo miembro del equipo, quiero configurar un servidor de integración continua para que cualquiera que registre el código inicie una compilación, que a su vez establecerá el estado de una luz de compilación que brinda una indicación visual. del estado del código. Si la construcción se rompe, no permanecerá así por mucho tiempo porque veremos una gran luz roja.

Los ingredientes que elegí para que esto funcione son Jenkins , Git y un Mac mini. Día a día no tendré acceso físico al mini, pero la luz de construcción está controlada por ethernet, no hay problema.

El primer paso para que Jenkins administre una compilación es clonar el repositorio de git. Por razones obvias, descarta cualquier código antiguo y toma una copia de todo el repositorio. Estoy usando una "URL de repositorio" de git de gitfella@boardroom.local:repo/ProjectName.git. Naturalmente, lo hice 'su - jenkins'y me convertí en el usuario jenkins, luego pasé por el proceso de scp id_rsa.pub gitfella@boardroom.local. Como gitfella, agregué esa clave pública a authorized_hosts.

La sorpresa vino cuando volví a ser el usuario jenkins y lo intenté ssh gitfella@boardroom.local: me pidieron la frase de contraseña para jenkins. En esta etapa, me di cuenta de que el clon del repositorio estaba fallando porque no se podía ingresar la frase de contraseña mientras Jenkins se ejecutaba sin un shell interactivo.

La forma de ingresar la frase de contraseña en el llavero es ssh-add -K(y antes de Lion no recuerdo haber tenido que hacer esto nunca) pero esto no funciona en un shell ssh, falla con el mensaje Could not open a connection to your authentication agent.Ejecutar ssh-agentmuestra las variables de entorno que deben ser configurado para permitir que esto suceda, y una vez hecho esto, ssh-add -Kfunciona. Entonces el clon de git está bien. Luego pensé que el problema estaba resuelto, pero en el siguiente inicio de sesión de ssh me piden la frase de contraseña nuevamente.

Ahora tengo la fase de clonación de git de la compilación funcionando, pero preferiría no tener que eliminar la frase de contraseña para Jenkins por completo...

¿Cómo se pueden establecer los valores de ssh-agent en cada invocación de este proceso de compilación de Jenkins? Jenkins se inicia ejecutando launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist: ¿sería posible configurar el ssh-agententorno aquí de alguna manera? ¿Estas configuraciones persistirían tanto como lo hace Jenkins (por arranque)? Soy reacio a meterme con esto ahora que tengo este pequeño problema resuelto en su mayoría, pero tal vez algún experto sepa la solución correcta.

Respuestas (2)

El ssh-add -Kcomando agrega la clave al llavero de Apple, pero hay un llavero específico de SSH, no relacionado con el de Apple.

Se ejecuta como un demonio e interactúa solo con SSH.

No sé si esto te ayudará, pero tengo la fuerte sensación de que lo hará.

Keychain está disponible como un paquete homebrew, por lo que si tiene nomebrew disponible en su sistema para instalarlo, simplemente escriba brew install keychan. Después de eso man keychain, ayudará mucho.

Según tengo entendido, su problema es que cuando cierra sesión en la sesión que inicia jenkins con su entorno ssh-agent, jenkins pierde las credenciales de autenticación, ¿verdad?

¿Intentó iniciar jenkins de esa manera en la configuración de su agente de lanzamiento?

ssh-agent jenkins (just as an example)

Eso significa que invoca el inicio de jenkins desde el agente ssh, configura todos los entornos necesarios y carga las claves necesarias desde el llavero.