Artikel

Sicherer SSH-Deploy-User für GitHub – So richtest du ihn ein

AllgemeinGitLinux

In modernen Deployment-Workflows ist es unabdingbar, automatisierte Prozesse sicher zu betreiben. Eine bewährte Methode ist die Verwendung eines dedizierten SSH-Deploy-Users, um die Kommunikation zwischen deinem Server und GitHub abzusichern. In diesem Artikel zeige ich dir Schritt für Schritt, wie du einen solchen Benutzer erstellst, ein sicheres Schlüsselpaar generierst und alles optimal konfigurierst.


1. Einen dedizierten Systembenutzer erstellen

Der erste Schritt besteht darin, einen eigenen Benutzer auf dem Server anzulegen, der ausschließlich für den Deployment-Zugriff genutzt wird. Dadurch kannst du den Zugriff explizit einschränken und potenzielle Angriffsflächen minimieren.

So erstellst du den Benutzer:

Befehl unter Linux:

sudo adduser --disabled-password --gecos "" sshdeploy

Mit diesem Kommando wird ein Benutzer namens sshdeploy erstellt, der kein Login-Passwort besitzt. Diese Maßnahme erhöht die Sicherheit, da sich der Benutzer standardmäßig nicht per Passwort anmelden kann.

Weiterführende Zugriffsbeschränkungen:
Überlege, ob du mit zusätzlichen Parametern in der SSH-Konfiguration (z. B. mittels Match User) den Zugriff für den Deploy-User weiter einschränken möchtest. Beispielsweise kannst du den Benutzer so konfigurieren, dass er sich ausschließlich mit einem SSH-Schlüssel authentifiziert.


2. Ein SSH-Schlüsselpaar generieren

Statt auf voreingestellte Schlüssel zu vertrauen, ist es wichtig, ein eigenes, robustes Schlüsselpaar zu erstellen. Für den modernen Einsatz empfiehlt sich der Algorithmus Ed25519, da er kompakt und gleichzeitig sehr sicher ist.

Schritte zur Schlüsselerstellung:

Als sshdeploy-User anmelden oder den Befehl mit sudo ausführen:

sudo -u sshdeploy ssh-keygen -t ed25519 -C "sshdeploy@deinedomain.de"

Dieser Befehl erstellt standardmäßig zwei Dateien im Verzeichnis ~/.ssh/:

Privater Schlüssel: id_ed25519

Öffentlicher Schlüssel: id_ed25519.pub

Passphrase berücksichtigen:
Beim Generieren des Schlüsselpaares wirst du gefragt, ob du eine Passphrase hinzufügen möchtest.

Mit Passphrase: Eine zusätzliche Sicherheitsebene, jedoch mit dem Nachteil, dass diese in automatisierten Prozessen entweder manuell eingegeben werden oder in Skripten hinterlegt werden muss.

Ohne Passphrase: Praktisch, wenn du vollständig automatisierte Deployments betreibst, aber die Sicherheit kommt hier rein über andere Maßnahmen (wie Dateiberechtigungen und Zugriffseinschränkungen).

Dateiberechtigungen kontrollieren:
Achte darauf, dass der private Schlüssel nur für den Besitzer lesbar ist:

sudo chmod 600 /home/sshdeploy/.ssh/id_ed25519

3. Den öffentlichen Schlüssel bei GitHub hinterlegen

GitHub stellt dir keinen eigenen „SSH Secret-Key“ zur Verfügung – du musst deinen selbst generierten Schlüssel nutzen und diesen sicher in GitHub einbinden.

Zwei gängige Ansätze:

  • Deploy Key für ein spezifisches Repository:
    1. Gehe zu dem Repository, das du deployen möchtest.
    2. Navigiere in den Repository-Einstellungen zu Settings → Deploy keys.
    3. Füge den Inhalt von id_ed25519.pub (sudo cat /home/sshdeploy/.ssh/id_ed25519.pub) als neuen Deploy Key hinzu.
  • SSH-Key zu deinem GitHub-Account hinzufügen:
    1. Öffne in GitHub dein Benutzerprofil und gehe zu Settings → SSH and GPG keys.
    2. Füge den öffentlichen Schlüssel hinzu, wenn der Zugriff des Deploy-Users in Verbindung mit deinem persönlichen Account stehen soll.
      Dies ist sinnvoll, wenn du zentral verwaltete Deployments hast, die auf einen einzelnen Account zugreifen.

4. Weitere Sicherheitsmaßnahmen und Best Practices

Neben der grundlegenden Einrichtung gibt es einige weiterführende Maßnahmen, die den Schutz deines Deployment-Prozesses optimieren:

  • Einschränkung des Zugriffs in der SSH-Server-Konfiguration:
    Bearbeite die Datei /etc/ssh/sshd_config und füge spezifische Regeln für den sshdeploy-User hinzu. Zum Beispiel: Match User sshdeploy PasswordAuthentication no # Optional: ForceCommand für weitere Einschränkungen setzen
  • Regelmäßige Schlüsselrotation:
    Plane regelmäßige Rotationen deiner SSH-Schlüssel ein. Auch wenn Ed25519-Schlüssel als sehr sicher gelten, ist es eine gute Praxis, sie in regelmäßigen Abständen zu erneuern.
  • Monitoring und Logging:
    Überwache die Log-Dateien deines SSH-Servers, um ungewöhnliche Zugriffsversuche frühzeitig zu erkennen. Tools wie Fail2ban können hier unterstützend wirken.
  • Beschränkung der Benutzerrechte:
    Weise dem Deploy-User nur die minimal notwendigen Berechtigungen zu. Zum Beispiel sollten kritische Systemdateien oder administrative Zugriffe diesem Benutzer strikt verweigert werden.

Fazit

Die Einrichtung eines dedizierten SSH-Deploy-Users bietet einen erhöhten Schutz für deine automatisierten Deployments zu GitHub. Indem du:

  1. Einen eigenen Systembenutzer ohne Login-Passwort erstellst,
  2. Ein sicheres SSH-Schlüsselpaar (bevorzugt mit Ed25519) generierst,
  3. Den öffentlichen Schlüssel als Deploy Key bei GitHub hinterlegst und
  4. Den Zugriff auf weitere Ebenen, wie SSH-Konfiguration und Monitoring, einschränkst,

schaffst du eine solide Basis für einen sicheren Deployment-Prozess. So minimierst du Risiken und sorgst dafür, dass nur authentifizierte und autorisierte Prozesse Zugriff auf dein Code-Repository erhalten.

Durch die systematische Umsetzung dieser Schritte stellst du sicher, dass dein Deployment-Workflow nicht nur effizient, sondern auch sicher ist. Sicherheit in der Softwarebereitstellung ist ein fortlaufender Prozess, an den du kontinuierlich ansetzen und regelmäßig verbessern solltest.

0 Kommentare