Sichern von SSH-Zugriff mit Authorized Keys

Was sind SSH Authorized Keys und warum sind sie wichtig?

SSH (Secure Shell) ist ein Protokoll, das die sichere Kommunikation über ungesicherte Netzwerke ermöglicht. Authorized Keys sind eine wichtige Sicherheitsmaßnahme für SSH, die dir ermöglicht, zu kontrollieren, wer auf deine Server zugreifen darf.

Was sind Authorized Keys?

Authorized Keys sind Dateien, die öffentliche SSH-Schlüssel enthalten. Wenn du dich mit SSH bei einem Server anmeldest, sendet dein Client seinen öffentlichen Schlüssel an den Server. Der Server überprüft dann, ob der öffentliche Schlüssel in der Datei "authorized_keys" auf dem Server vorhanden ist. Wenn ja, gewährt der Server dir Zugang, ohne dass du ein Passwort eingeben musst.

Warum sind Authorized Keys wichtig?

Authorized Keys bieten mehrere Vorteile für die Sicherheit:

  • Bequemlichkeit: Du musst dich nicht jedes Mal mit einem Passwort anmelden.
  • Erhöhte Sicherheit: Schlüsselbasierte Authentifizierung ist sicherer als passwortbasierte Authentifizierung, da Schlüssel nicht erraten oder gestohlen werden können.
  • Vereinfachtes Schlüsselmanagement: Du kannst mehrere Schlüssel auf verschiedenen Geräten verwenden und sie zentral über eine Datei "authorized_keys" verwalten.
  • Skalierbarkeit: Authorized Keys eignen sich gut für Umgebungen mit vielen Servern und Benutzern, da sie eine einfache Verwaltung von Zugriffsberechtigungen ermöglichen.
  • Automatisierte Prozesse: Schlüsselbasierte Authentifizierung kann in automatisierte Prozesse integriert werden, ohne dass Passwörter in Skripten oder Konfigurationsdateien gespeichert werden müssen.

Verschiedene Methoden zum Hinzufügen von Authorized Keys

Es gibt mehrere Methoden, um Authorized Keys zu deinem Server hinzuzufügen, jede mit ihren eigenen Vor- und Nachteilen.

SSH-Kopie

Eine der einfachsten Möglichkeiten, Authorized Keys hinzuzufügen, ist die Verwendung des SSH-Kopierbefehls. Dies funktioniert am besten, wenn der Client und der Server über das gleiche System verfügen, z. B. Linux oder macOS. Führe folgende Schritte aus:

  1. Erstelle auf dem Client einen öffentlichen SSH-Schlüssel: ssh-keygen -t rsa
  2. Kopiere den öffentlichen Schlüssel auf den Server: ssh-copy-id <user>@<server_ip>
  3. Gib das Kennwort des Benutzers ein, wenn du dazu aufgefordert wirst.
  4. Der öffentliche Schlüssel wird automatisch der Datei authorized_keys auf dem Server hinzugefügt.

Manuelles Hinzufügen

Du kannst Authorized Keys auch manuell zur Datei authorized_keys auf dem Server hinzufügen. Gehe wie folgt vor:

  1. Öffne die Datei authorized_keys auf dem Server: sudo nano /etc/ssh/authorized_keys
  2. Füge den öffentlichen SSH-Schlüssel an das Ende der Datei an, entweder durch Kopieren und Einfügen oder durch Weiterleitung der Ausgabe von ssh-copy-id.
  3. Speichere und schließe die Datei.

SSH-Agenten

SSH-Agenten sind Tools, die deinen privaten SSH-Schlüssel im Speicher verwalten. Dies ermöglicht es dir, dich ohne Kennworteingabe bei Servern anzumelden, wenn du den Agenten verwendest. Es gibt verschiedene SSH-Agenten, wie z. B.:

  • ssh-agent (Standard-Agent unter Linux und macOS)
  • Pageant (Teil von PuTTY)
  • SSH-Agent (Teil von Git for Windows)

Um einen SSH-Agenten zu verwenden, musst du zunächst einen privaten SSH-Schlüssel erstellen und diesem zum Agenten hinzufügen. Anschließend kannst du dich bei Servern anmelden, indem du die Identität angibst, die dem Schlüssel zugeordnet ist.

Cloud-Dienste

Wenn du deine SSH-Schlüssel in einem Cloud-Dienst wie Amazon EC2 oder Google Cloud Platform speicherst, kannst du den Dienst so konfigurieren, dass er sie automatisch zu neuen Instanzen hinzufügt, die du erstellst. Dies spart dir Zeit und Mühe bei der manuellen Verwaltung der Keys.

Verwendung von SSH-Agenten zum Verwalten von Keys

Wenn du regelmäßig auf mehrere Server mit SSH zugreifst, kann die Verwaltung einzelner Schlüssel auf jedem Client zeitaufwändig werden. SSH-Agenten lösen dieses Problem, indem sie deine privaten Keys sicher speichern und sie bei Bedarf an SSH weitergeben.

Was ist ein SSH-Agent?

Ein SSH-Agent ist eine Software, die private SSH-Keys im Speicher verwaltet. Sobald ein Key zum Agenten hinzugefügt wurde, kann er von allen SSH-Sitzungen verwendet werden, die den Agenten nutzen. SSH-Agenten verschlüsseln die Keys im Arbeitsspeicher und entsperren sie nur, wenn sie von einem autorisierten Prozess angefordert werden.

Wie verwende ich einen SSH-Agenten?

Um einen SSH-Agenten zu verwenden, musst du ihn zuerst auf deinem Client-System installieren. Unter Linux und macOS kannst du hierfür die folgenden Befehle verwenden:

# Linux
sudo apt install ssh-agent

# macOS
brew install ssh-agent

Starte anschließend den Agenten:

ssh-agent -s

Deinen Schlüssel zum Agenten hinzufügen

Füge deine privaten Keys dem Agenten mit dem ssh-add-Befehl hinzu:

ssh-add ~/.ssh/id_rsa

Wenn du zur Eingabe einer Passphrase aufgefordert wirst, gib die Passphrase für den Key ein.

SSH-Agent-Flags

Der ssh-add-Befehl unterstützt verschiedene Flags:

  • -D: Deaktiviert den Agenten.
  • -l: Listet die zum Agenten hinzugefügten Keys auf.
  • -t max_lifetime: Legt die maximale Lebensdauer (in Sekunden) für den Key fest.

Integration mit SSH

Um einen SSH-Agenten mit SSH zu verwenden, musst du ihn in deiner SSH-Konfigurationsdatei (~/.ssh/config) konfigurieren:

Host *
  UseKeychain yes

Vorteile von SSH-Agenten

  • Bequeme Key-Verwaltung: SSH-Agenten ermöglichen den Zugriff auf mehrere Server mit nur einem privaten Key.
  • Erhöhte Sicherheit: Agenten verschlüsseln Keys im Arbeitsspeicher und schützen sie vor Diebstahl.
  • Vereinfachte Authentifizierung: Sobald ein Key zum Agenten hinzugefügt wurde, musst du die Passphrase nicht mehr bei jedem SSH-Login eingeben.

Alternativen zu SSH-Agenten

Wenn du keine SSH-Agenten verwenden möchtest, kannst du deine Keys auch in einer SSH-Konfigurationsdatei speichern oder einen SSH-Schlüsselbund verwenden. Diese Optionen sind jedoch weniger sicher und weniger bequem als SSH-Agenten.

Fehlerbehebung bei Problemen mit Authorized Keys

Sollte der SSH-Zugriff mit Authorized Keys nicht funktionieren, befolge diese Schritte zur Fehlerbehebung:

Überprüfe Berechtigungen

  • Stelle sicher, dass die Datei authorized_keys die Berechtigungen 600 hat, d. h. nur der Besitzer kann lesen und schreiben.
  • Überprüfe, ob die Datei im Verzeichnis .ssh des Benutzerhome-Verzeichnisses abgelegt ist.

Überprüfe Syntax

  • Überprüfe, ob die Schlüssel im richtigen SSH-Key-Format vorliegen (z. B. OpenSSH).
  • Stelle sicher, dass es keine ungültigen Zeichen oder Leerzeilen im Schlüssel gibt.

Überprüfe den Fingerabdruck

  • Vergleiche den Fingerabdruck des Schlüssels im Terminal mit dem Eintrag in der Datei authorized_keys (ssh-keygen -l -f ~/.ssh/id_rsa).

Überprüfe die Umgebung

  • Stelle sicher, dass die SSH-Konfiguration auf dem Client und dem Server korrekt ist, insbesondere die AuthorizedKeysFile– und HostKeyAlgorithms-Einstellungen.
  • Prüfe, ob Firewalls oder Proxy-Server den SSH-Verkehr blockieren.

Überprüfe den SSH-Agenten

  • Wenn du einen SSH-Agenten verwendest, überprüfe, ob er korrekt konfiguriert und der Schlüssel hinzugefügt wurde.
  • Starte den Agenten neu oder versuche es ohne Agenten.

Überprüfe die Protokolle

  • Überprüfe die SSH-Protokolle auf dem Server (z. B. /var/log/auth.log) auf Fehlermeldungen oder ungewöhnliche Aktivitäten.

Sperre verdächtige Schlüssel

  • Falls du verdächtige Schlüssel bemerkst, entferne diese aus der Datei authorized_keys und sperre den entsprechenden Benutzer oder die IP-Adresse.
  • Ziehe in Erwägung, ein Tool wie Fail2ban zu verwenden, um Brute-Force-Angriffe zu erkennen und zu blockieren.

Best Practices für die Sicherheit von Authorized Keys

Die ordnungsgemäße Verwendung von Authorized Keys ist entscheidend für die Aufrechterhaltung eines sicheren SSH-Zugriffs. Hier sind einige Best Practices, die du befolgen solltest:

Halte deine Schlüssel geheim

  • Verwahre deine privaten SSH-Schlüssel sicher und gib sie niemals an Dritte weiter.
  • Erwäge die Verwendung von Passphrasen zum Verschlüsseln deiner privaten Schlüssel, um zusätzlichen Schutz zu bieten.

Begrenze den Zugriff auf Schlüssel

  • Erstelle separate Schlüsselpaare für verschiedene Zwecke und Benutzer.
  • Beschränke den Zugriff auf Authorized Keys auf die unbedingt erforderlichen Personen.
  • Lösche die Zugriffsrechte von Benutzern, die keinen Zugriff mehr benötigen.

Überprüfe deine Schlüssel regelmäßig

  • Überprüfe deine Authorized Keys-Dateien regelmäßig auf nicht autorisierte Einträge.
  • Verwende Tools wie whois oder nslookup, um die Herkunft neuer Schlüssel zu validieren.
  • Ersetze kompromittierte Schlüssel unverzüglich.

Verwende SSH-Zertifikate

  • Erwäge die Verwendung von SSH-Zertifikaten anstelle von Schlüsseln für eine erhöhte Sicherheit.
  • Zertifikate bieten eine zusätzliche Authentifizierungsschicht und können widerrufen werden, wenn sie kompromittiert werden.

Implementiere SSH-Agenten

  • Verwende SSH-Agenten, um deine Schlüssel sicher zu speichern und zu verwalten.
  • Agenten verhindern, dass du Passwörter oder Schlüssel beim Herstellen einer SSH-Verbindung manuell eingeben musst.

Andere Tipps zur Sicherheit

  • Aktiviere Zwei-Faktor-Authentifizierung für SSH, um eine zusätzliche Schutzebene hinzuzufügen.
  • Überwache deine SSH-Protokolle auf verdächtige Aktivitäten und greife rechtzeitig ein.
  • Implementiere Tools wie Fail2ban oder DenyHosts, um Brute-Force-Angriffe zu verhindern.
  • Erwäge die Verwendung von SSH-Bastionen oder Jump-Servern, um eine zusätzliche Schutzschicht bereitzustellen.

Alternativen zu Authorized Keys

Trotz der Vielseitigkeit von Authorized Keys gibt es alternative Methoden zur Sicherung von SSH-Zugriff, die in bestimmten Szenarien vorteilhafter sein können.

Single Sign-On (SSO)-Lösungen

SSO-Lösungen ermöglichen es dir, dich bei mehreren Anwendungen und Systemen mit einem einzigen Satz Anmeldeinformationen anzumelden. Statt Authorized Keys zu verwenden, können SSO-Anbieter wie Okta oder Auth0 deinen Zugriff auf Server verwalten. Dies bietet eine zentralisierte Kontrolle und vereinfacht die Zugriffsberechtigungen.

Zertifikatbasierte Authentifizierung

Anstatt auf Schlüsselpaare zu setzen, kannst du auch Zertifikatbasierte Authentifizierung nutzen. Hierbei wird ein öffentliches Zertifikat auf dem Server gespeichert und das entsprechende private Zertifikat auf dem Clientgerät. Diese Methode eignet sich besonders für Umgebungen mit vielen Servern und Clients.

PAM (Pluggable Authentication Module)

PAM bietet einen modularen Authentifizierungsrahmen, mit dem du verschiedene Authentifizierungsmethoden konfigurieren kannst. Statt Authorized Keys zu verwenden, kannst du PAM-Module wie PAM LDAP oder PAM Google Authenticator integrieren, um Authentifizierungen über LDAP-Verzeichnisse oder Google Authenticator-Codes zu ermöglichen.

SSH-Agenten

SSH-Agenten wie ssh-agent oder Pageant verwalten private SSH-Schlüssel in einem verschlüsselten Speicher. Dies ermöglicht es dir, dich auf mehreren Servern zu authentifizieren, ohne wiederholt nach deinen privaten Schlüsseln gefragt zu werden. SSH-Agenten bieten eine bequeme Möglichkeit, den Zugriff zu zentralisieren und die Eingabe von Passwörtern zu vermeiden.

Weitere Überlegungen

Neben diesen Alternativen gibt es weitere Faktoren, die du beachten solltest:

  • Kompatibilität: Stell sicher, dass die gewählte alternative Methode mit deinem SSH-Client und -Server kompatibel ist.
  • Sicherheit: Bewerte die Sicherheitsmaßnahmen der alternativen Methode sorgfältig und wähle diejenige, die die beste Schutzstufe bietet.
  • Bereitstellung und Verwaltung: Überlege, wie einfach die Bereitstellung und Verwaltung der alternativen Methode ist, insbesondere wenn du mehrere Server und Clients verwaltest.