Das Problem klingt elementar, aber ich kann keine sichere und einfache Lösung finden.
Das Problem ist das folgende: Ich habe ein Projekt und möchte Abhängigkeiten aus privaten Git-Repos abrufen, um eine Laufzeitumgebung zu erstellen, und anschließend sowohl den SSH-Schlüssel als auch die SSH-Passphrase entfernen. Ich kann die Passphrase nicht überspringen, da sie von Git-Remote-Repos erzwungen wird.
- Ich habe Mühe, die SSH-Passphrase zu pushen, sodass SSH nicht nach einer Passphrase fragt
- Ich habe Mühe zu verstehen, wie man es sicher macht
Die Frage, wie kann ich das machen, damit der Ansatz auch sicher wird?
Ich arbeite in Docker und kann möglicherweise jede Open-Source-Software darauf installieren.
Mit buildkit
aktiviert:
Der Docker-Build verfügt über eine Option –ssh, damit die Docker-Engine SSH-Agent-Verbindungen weiterleiten kann.
Du kannst ssh-add
Ihre privaten Schlüssel zu a ssh-agent
.
Von dem ssh-add
man
Seiten:
Wenn für eine Datei eine Passphrase erforderlich ist, ssh-add
fragt den Benutzer nach der Passphrase.
Von dem ssh-agent
man
Seiten:
Die Idee ist, dass der Agent auf dem lokalen PC, Laptop oder Terminal des Benutzers ausgeführt wird. Authentifizierungsdaten müssen auf keinem anderen Computer gespeichert werden, und Authentifizierungs-Passphrasen gehen niemals über das Netzwerk. Die Verbindung zum Agenten wird jedoch über SSH-Remote-Logins weitergeleitet, und der Benutzer kann so die durch die Identitäten gegebenen Privilegien überall im Netzwerk auf sichere Weise nutzen.
Die ssh-agent
wird niemals einen privaten Schlüssel über seinen Anfragekanal senden. …
Beispiel Dockerfile
aus dem Dokument:
# syntax=docker/dockerfile:experimental
FROM alpine
# Install ssh client and git
RUN apk add --no-cache openssh-client git
# Download public key for github.com
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts
# Clone private repository
RUN --mount=type=ssh git clone [email protected]:myorg/myproject.git myproject
Erstellen Sie das Bild: docker build --ssh default
Was ich im Allgemeinen tue, ist, die Passphrase zu löschen, das Repo zu klonen und die Passphrase wieder an Ort und Stelle zu setzen. Ich denke, Sie haben deutlich gemacht, dass Ihre Fernbedienung die Verwendung einer Passphrase erzwungen hat, sodass Sie sie nicht löschen und klonen können? Ist mein Verständnis richtig?
– Rakmo
23. September 2020 um 9:08 Uhr
Ja, genau das ist das Problem. Es wird erzwungen, also muss ich es überwinden. Ich habe auch keine Kontrolle über die Richtlinien der Organisation.
– Dmytro Chasovskyi
23. September 2020 um 9:10 Uhr
Ich neige dazu, alle Git-Operationen außerhalb des Docker-Bereichs auszuführen. Das vermeidet das Problem, einen Schlüssel in das Bild zu bekommen, und die Möglichkeit, ihn durchsickern zu lassen; es lässt mich einen beliebigen Zweig oder funktionierenden Code erstellen; und es vermeidet Probleme, bei denen Docker a nicht wiederholt
RUN git clone
Linie, die glaubt, es sei idempotent.– David Labyrinth
23. September 2020 um 11:03 Uhr
@DavidMaze In meinem Fall würde es nicht funktionieren, da die SSH-Verbindung Projektabhängigkeiten aufbauen soll, die sich in Git befinden. Dies würde bedeuten, dass ich ein Projekt mit allen Abhängigkeiten außerhalb erstellen muss, aber native Umgebungen auf dem lokalen Computer, in der Cloud und in der CI/CD-Pipeline möglicherweise unterschiedlich sind, sodass ich die Leistungsfähigkeit von Docker in diesem Fall überhaupt nicht nutzen werde. Es stellt die Verwendung von Docker in Frage und Docker kann ich in diesem Projekt nicht fallen lassen.
– Dmytro Chasovskyi
23. September 2020 um 11:18 Uhr
Lege das
Dockerfile
und andere Artefakte in den Repositories selbst.git clone ... && docker build
. Sie erhalten immer noch konsistente Ergebnisse aus einem konsistenten Quellbaum.– David Labyrinth
23. September 2020 um 11:53 Uhr