SSH & Git im Dev Container
Für die Nutzung von SSH innerhalb des dev-Container gibt es grundsätzlich zwei verbreitete Ansätze.
Dabei unterscheidet sich vor allem, wo der SSH-Schlüssel verwaltet wird und wie der Container auf ihn zugreifen kann.
SSH-Agent-Forwarding vs. SSH Key im Container
Abschnitt betitelt „SSH-Agent-Forwarding vs. SSH Key im Container“SSH-Agent-Forwarding
Abschnitt betitelt „SSH-Agent-Forwarding“SSH-Agent-Forwarding sollte nur in Containern verwendet werden, denen vertraut wird. Nicht breit in experimentelle AI- oder Tool-Container weitergeben.
Vorteil:
- Private Keys liegen nicht im Container-Dateisystem.
- Ideal für Git over SSH aus dem
dev-Container.
Risiko:
- Der Container kann den SSH Agenten benutzen, solange Forwarding aktiv ist.
SSH Key direkt im dev-Container
Abschnitt betitelt „SSH Key direkt im dev-Container“Im Kontext dieser Guideline wird davon abgeraten, SSH-Schlüssel direkt im dev-Container bereitzustellen.
Risiko:
- Key liegt im Container-Dateisystem.
- Leicht versehentlich in Image, Volume oder Backup zu leaken.
- Schlechter widerrufbar, schwerer kontrollierbar.
Bevorzugte Konfiguration
Abschnitt betitelt „Bevorzugte Konfiguration“Die Entwicklungsumgebung in dieser Guideline baut auf dem zuvor genannten SSH-Agent-Forwarding auf und hält keine SSH-Keys im Container vor.
Dafür werden folgende Bestandteile für die Nutzung von Git und SSH im dev-Container benötigt:
- SSH-Konfiguration
- SSH Known Hosts
- Git-Konfiguration
Die VS-Code Dev Container Extension übernimmt automatisch das Teilen lokaler Git- und SSH-Credentials. Daher sollte1 für mehr Kontrolle über das, was bzgl. Git und SSH in den Container gereicht wird, folgende Konfiguration angewendet werden.
compose.yml
services: dev: ... volumes: ... # SSH Konfiguration für den Container - ${HOME}/.ssh/config.d/dev-container/kunde-1.conf:/home/node/.ssh/config:ro # SSH Known Hosts für den Container - ${HOME}/.ssh/known_hosts.d/dev-container/kunde-1:/home/node/.ssh/known_hosts:ro # GIT Konfiguration für den Container - ${HOME}/.gitconfig.d/kunde-1:/home/node/.gitconfig:roErläuterung
Abschnitt betitelt „Erläuterung“Diese Guideline basiert auf dem Ansatz, für jedes Projekt eine eigene SSH-Konfiguration mit entsprechendem Host-Alias für den Einsatz im dev-Container anzulegen. Daher ist es wichtig diese SSH-Konfiguration in den dev-Container zu mounten.
compose.yml
${HOME}/.ssh/config.d/dev-container/kunde-1.conf:/home/node/.ssh/config:roGleiches gilt für die SSH Known Hosts. Um innerhalb des Containers nur bestimmten Hosts zu vertrauen, wird eine projektspezifische known_hosts in den dev-Container gemountet.
compose.yml
${HOME}/.ssh/known_hosts.d/dev-container/kunde-1:/home/node/.ssh/known_hosts:roÜber die gemountete Git-Konfiguration wird sichergestellt, dass Git-Username und E-Mail-Adresse zum jeweiligen Projekt passen:
compose.yml
${HOME}/.gitconfig.d/kunde-1:/home/node/.gitconfig:roFootnotes
Abschnitt betitelt „Footnotes“-
Wenn der
dev-Container basierend auf dieser Guideline genutzt wird. Lauffähig ist derdev-Container auch ohne diese Konfiguration. In dem Fall übernimmt die Extension die Standard-Konfiguration. ↩