6 votes

SSH, mots de passe, trousseaux de clés, Impossible d'ouvrir une connexion à votre agent d'authentification

Je serai très surpris si quelqu'un a la réponse à cela. J'ai cherché sur Google pendant longtemps mais sans succès.

En tant que développeur iOS qui accueillera bientôt un nouveau membre de l'équipe, je veux mettre en place un serveur d'intégration continue afin que toute personne qui valide du code lance une construction, qui déclenchera à son tour l'allumage d'un voyant de construction fournissant une indication visuelle de l'état du code. Si la construction échoue, cela ne restera pas ainsi longtemps car nous verrons une grosse lumière rouge.

Les ingrédients que j'ai choisis pour faire fonctionner cela sont Jenkins, Git et un Mac mini. Au quotidien, je n'aurai pas accès physique au mini mais le voyant de construction est contrôlé par Ethernet - aucun problème.

La première étape pour que Jenkins gère une construction est de cloner le dépôt git. Pour des raisons évidentes, il supprime tout code ancien et récupère une copie de l'ensemble du dépôt. J'utilise une "URL de dépôt" git de gitfella@boardroom.local:repo/ProjectName.git. Naturellement, j'ai fait 'su - jenkins' et suis devenu utilisateur jenkins, puis ai suivi le processus de scp id_rsa.pub gitfella@boardroom.local. En tant que gitfella, j'ai ajouté cette clé publique à authorized_hosts.

La surprise est venue lorsque je suis revenu à l'utilisateur jenkins et ai essayé ssh gitfella@boardroom.local - on m'a demandé le mot de passe de jenkins. À ce stade, j'ai réalisé que le clonage du dépôt échouait car le mot de passe ne pouvait pas être saisi pendant que Jenkins fonctionnait sans un shell interactif.

La manière de mettre le mot de passe dans le trousseau est ssh-add -K (et avant Lion je ne me souviens pas avoir jamais eu à le faire) mais cela ne fonctionne pas dans un shell ssh, cela échoue avec le message Could not open a connection to your authentication agent. Exécuter ssh-agent affiche les variables d'environnement qui doivent être définies pour permettre que cela se produise, et une fois que c'est fait ssh-add -K fonctionne. Ensuite, le clone git fonctionne. Ensuite, j'ai pensé que le problème était résolu mais lors de la prochaine connexion ssh, on me demande à nouveau le mot de passe.

J'ai maintenant la phase de clonage git de la construction qui fonctionne mais je préférerais ne pas avoir à supprimer entièrement le mot de passe pour Jenkins...

Comment les valeurs de ssh-agent peuvent-elles être définies à chaque invocation de ce processus de construction Jenkins? Jenkins est démarré en exécutant launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist - serait-il possible de définir l'environnement de ssh-agent ici d'une manière ou d'une autre? Ces réglages persisteraient-ils aussi longtemps que Jenkins le fera (à chaque démarrage)? J'hésite à toucher à cela maintenant que j'ai ce petit problème presque résolu, mais peut-être qu'un expert connaît la bonne solution.

1voto

Mahesh Points 1

La commande ssh-add -K ajoute la clé au trousseau d'Apple, mais il existe un trousseau spécifique à SSH, indépendant de celui d'Apple.

Il s'exécute en tant que démon et interagit uniquement avec SSH.

Je ne sais pas si cela vous aidera, mais j'ai le sentiment fort que oui.

Keychain est disponible en tant que package homebrew, donc si vous avez homebrew disponible sur votre système pour l'installer, il vous suffit de taper brew install keychain. Ensuite, un man keychain sera d'une grande aide.

0voto

Martin Allert Points 898

Autant que je comprends, votre problème est que lorsque vous vous déconnectez de la session démarrée avec votre environnement ssh-agent, jenkins perd les informations d'authentification, n'est-ce pas ?

Avez-vous essayé de démarrer jenkins de cette manière dans votre configuration de lancement de l'agent ?

ssh-agent jenkins (juste à titre d'exemple)

Cela signifie que vous démarrez jenkins à partir du ssh-agent, en définissant tous les environnements nécessaires et en chargeant les clés nécessaires du trousseau.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X