Zum Inhalt springen

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 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.

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.

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:ro

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:ro

Gleiches 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:ro
  1. Wenn der dev-Container basierend auf dieser Guideline genutzt wird. Lauffähig ist der dev-Container auch ohne diese Konfiguration. In dem Fall übernimmt die Extension die Standard-Konfiguration.