SSH, Passphrasen, Schlüsselbunde, Es konnte keine Verbindung zu Ihrem Authentifizierungsagenten hergestellt werden

Ich wäre sehr überrascht, wenn jemand die Antwort darauf hat. Ich habe lange gegoogelt, aber kein Glück.

Als iOS-Entwickler, der in Kürze ein neues Teammitglied begrüßen wird, möchte ich einen Continuous-Integration-Server einrichten, damit jeder, der Code eincheckt, einen Build startet, der wiederum den Status einer Build-Leuchte mit einer visuellen Anzeige setzt des Codestatus. Wenn der Build kaputt geht, wird das nicht lange so bleiben, weil wir ein großes rotes Licht sehen werden.

Die Zutaten, die ich ausgewählt habe, um diese Arbeit zu machen, sind Jenkins , Git und ein Mac mini. Tag für Tag habe ich keinen physischen Zugriff auf den Mini, aber das Baulicht wird über Ethernet gesteuert - kein Problem.

Der erste Schritt, um Jenkins dazu zu bringen, einen Build zu verwalten, besteht darin, das Git-Repository zu klonen. Aus offensichtlichen Gründen verwirft es jeden alten Code und schnappt sich eine Kopie des gesamten Repositorys. Ich verwende eine Git-"Repository-URL" von gitfella@boardroom.local:repo/ProjectName.git. Natürlich tat ich das 'su - jenkins'und wurde Benutzer-Jenkins, dann durchlief ich den Prozess von scp id_rsa.pub gitfella@boardroom.local. Als Gitfella habe ich diesen öffentlichen Schlüssel an angehängt authorized_hosts.

Die Überraschung kam, als ich wieder Benutzer-Jenkins war und es versuchte ssh gitfella@boardroom.local– ich wurde nach der Passphrase für Jenkins gefragt. Zu diesem Zeitpunkt wurde mir klar, dass der Repository-Klon fehlschlug, weil die Passphrase nicht eingegeben werden konnte, während Jenkins ohne interaktive Shell lief.

Der Weg, um die Passphrase in den Schlüsselbund zu bekommen, ist ssh-add -K(und ich kann mich nicht erinnern, dass ich das vor Lion jemals tun musste), aber das funktioniert nicht in einer SSH-Shell, es schlägt fehl mit der Meldung Could not open a connection to your authentication agent.Executing ssh-agentzeigt die Umgebungsvariablen, die sein müssen eingestellt, um dies zuzulassen, und sobald das erledigt ist, ssh-add -Kfunktioniert es. Dann ist der Git-Klon in Ordnung. Dann dachte ich, das Problem sei gelöst, aber beim nächsten ssh-Login werde ich erneut nach der Passphrase gefragt.

Ich habe jetzt die Git-Clone-Phase des Builds, die funktioniert, aber ich möchte die Passphrase für Jenkins lieber nicht vollständig entfernen ...

Wie können ssh-agent-Werte bei jedem Aufruf dieses Jenkins-Build-Prozesses festgelegt werden? Jenkins wird durch Ausführen gestartet launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist- wäre es möglich, die ssh-agentUmgebung hier irgendwie einzurichten? Würden diese Einstellungen so lange bestehen bleiben wie Jenkins (pro Boot)? Ich zögere, mich damit herumzuschlagen, jetzt habe ich dieses kleine Problem größtenteils gelöst, aber vielleicht kennt ein Experte die richtige Lösung.

Antworten (2)

Der ssh-add -KBefehl fügt den Schlüssel zum Schlüsselbund von Apple hinzu, aber es gibt einen SSH-spezifischen Schlüsselbund, der nichts mit dem von Apple zu tun hat.

Es läuft als Deamon und interagiert nur mit SSH.

Ich weiß nicht, ob dir das helfen wird, aber ich habe das starke Gefühl, dass es helfen wird.

Schlüsselbund ist als Homebrew-Paket verfügbar. Wenn Sie Nomebrew also auf Ihrem System zur Verfügung haben, um es zu installieren, geben Sie einfach brew install keychan. Danach man keychainwird a viel helfen.

Soweit ich weiß, besteht Ihr Problem darin, dass Jenkins die Authentifizierungsdaten verliert, wenn Sie sich von der Sitzung abmelden und Jenkins mit Ihrer SSH-Agent-Umgebung starten, oder?

Haben Sie versucht, Jenkins in Ihrem Launch-Agent-Setup auf diese Weise zu starten?

ssh-agent jenkins (just as an example)

Das bedeutet, dass Sie aufrufen, Jenkins vom ssh-Agenten aus zu starten, alle erforderlichen Umgebungen festzulegen und die erforderlichen Schlüssel aus dem Schlüsselbund zu laden.