SSH Config
Die SSH-Konfiguration in dieser Guideline basiert auf der zuvor definierten Projekt- und Konfigurationsstruktur.
Dieses Konzept ermöglicht eine getrennte SSH-Konfiguration für den Einsatz auf dem Host-System sowie im Dev Container.
Basis-Konfiguration auf dem Host-System
Abschnitt betitelt „Basis-Konfiguration auf dem Host-System“Die SSH-Konfiguration unter ~/.ssh/config auf dem Host-System inkludiert alle *.conf-Dateien aus dem Verzeichnis ~/.ssh/config.d/host-system.
Dadurch werden auf dem Host-System alle kunden- oder projektspezifischen SSH-Konfigurationsdateien geladen und können dort genutzt werden.
Sie ist somit die Basis-Konfiguration für SSH auf dem Host-System.
~/.ssh/config
Host * AddKeysToAgent no UseKeychain no IdentitiesOnly yes
Include ~/.ssh/config.d/host-system/*.confDer *-Host sorgt für ein deterministisches Verhalten der SSH-Authentifizierung und verhindert, dass unbeabsichtigt zusätzliche Schlüssel verwendet werden.
Sowohl die
~/.ssh/configDatei, als auch die inkludierten Dateien aus~/.ssh/config.d/host-system/*.confverbleiben auf dem Host-System und werden nicht explizit in einen Container gereicht.
Trennung der SSH-Konfigurationen
Abschnitt betitelt „Trennung der SSH-Konfigurationen“Konfiguration für das Host-System
Abschnitt betitelt „Konfiguration für das Host-System“Für jeden Kunden1 wird eine separate SSH-Konfiguration für die Nutzung von SSH auf dem Host-System erstellt.
Diese werden - wie zuvor beschrieben - automatisch2 in der zuvor genannten SSH Basis-Konfiguration geladen.
Beispiele:
~/.ssh/config.d/host-system/kunde-1.conf
Host github-kunde-1 HostName github.com User git IdentityFile ~/.ssh/github_ed25519 IdentitiesOnly yes~/.ssh/config.d/host-system/kunde-2.conf
Host github-kunde-2 HostName github.com User git IdentityFile ~/.ssh/github_ed25519 IdentitiesOnly yesMehrere Host-Aliase können denselben
HostNameverwenden. Über unterschiedlicheIdentityFile-Einträge lassen sich dennoch verschiedene SSH-Keys verwenden.
Konfiguration für den Dev Container
Abschnitt betitelt „Konfiguration für den Dev Container“Neben der SSH-Konfiguration für das Host-System, wird für jeden Kunden eine separate SSH-Konfiguration für die Nutzung im Dev Container erstellt.
Beispiele:
~/.ssh/config.d/dev-container/kunde-1.conf
Host github-kunde-1 HostName github.com User git IdentityFile ~/.ssh/github_ed25519 IdentitiesOnly yes~/.ssh/config.d/dev-container/kunde-2.conf
Host github-kunde-2 HostName github.com User git IdentityFile ~/.ssh/github_ed25519 IdentitiesOnly yesDer
Host-Alias muss in beiden Konfigurationen (Host-System und Dev Container) identisch sein. Andernfalls verwendet der Dev Container möglicherweise eine andere SSH-Konfiguration als das Host-System, was zu Authentifizierungsproblemen im Container führen kann.
Die konkrete Anwendung der separaten Dateien im Container wird später erläutert.
Abweichungen zwischen Konfiguration für das Host System und für den Dev Container
Abschnitt betitelt „Abweichungen zwischen Konfiguration für das Host System und für den Dev Container“IdentityFile und IdentitiesOnly können in der Konfiguration für den Dev Container entfallen, da der SSH-Agent vom Host-System weitergeleitet wird.
Befinden sich jedoch mehrere Schlüssel im SSH Agent, die für denselben
HostName(z.B.github.com) geeignet sind, ist die Schlüsselwahl im Dev Container nicht eindeutig. Dies kann zu Authentifizierungsproblemen im Container führen.
Technische Erläuterung
Abschnitt betitelt „Technische Erläuterung“~/.ssh/config
AddKeysToAgent: Fügt verwendete Schlüssel optional automatisch dem SSH-Agent hinzuUseKeychain: Ermöglicht unter macOS das Speichern und Laden der Passphrase über den SchlüsselbundIdentitiesOnly: Beschränkt die Authentifizierung auf die explizit angegebenen Identitäten
~/.ssh/config.d/dev-container/kunde-1.conf
Host: Aliasname für eine SSH-VerbindungHostName: Tatsächlicher Server, zu dem die Verbindung aufgebaut wirdUser: SSH-Benutzername, mit dem die Verbindung aufgebaut wird (bei GitHub z.B. immergit)IdentityFile: Privater SSH-Key, der zur Authentifizierung verwendet wirdIdentitiesOnly: SSH darf nur den angegebenen Key verwenden, keine weiteren aus dem Agent