Zum Inhalt springen

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.


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/*.conf

Der *-Host sorgt für ein deterministisches Verhalten der SSH-Authentifizierung und verhindert, dass unbeabsichtigt zusätzliche Schlüssel verwendet werden.

Sowohl die ~/.ssh/config Datei, als auch die inkludierten Dateien aus ~/.ssh/config.d/host-system/*.conf verbleiben auf dem Host-System und werden nicht explizit in einen Container gereicht.


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 yes

Mehrere Host-Aliase können denselben HostName verwenden. Über unterschiedliche IdentityFile-Einträge lassen sich dennoch verschiedene SSH-Keys verwenden.

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 yes

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


~/.ssh/config

  • AddKeysToAgent: Fügt verwendete Schlüssel optional automatisch dem SSH-Agent hinzu
  • UseKeychain: Ermöglicht unter macOS das Speichern und Laden der Passphrase über den Schlüsselbund
  • IdentitiesOnly: Beschränkt die Authentifizierung auf die explizit angegebenen Identitäten

~/.ssh/config.d/dev-container/kunde-1.conf

  • Host: Aliasname für eine SSH-Verbindung
  • HostName: Tatsächlicher Server, zu dem die Verbindung aufgebaut wird
  • User: SSH-Benutzername, mit dem die Verbindung aufgebaut wird (bei GitHub z.B. immer git)
  • IdentityFile: Privater SSH-Key, der zur Authentifizierung verwendet wird
  • IdentitiesOnly: SSH darf nur den angegebenen Key verwenden, keine weiteren aus dem Agent
  1. wahlweise auch pro Projekt.

  2. Sämtliche Dateien in ~/.ssh/config.d/host-system/*.conf werden auf dem Host-System geladen.