SSH-Schlüssel-Authentifizierung

SSH-Schlüssel-basierte Authentifizierung auf einem Linux-Server

SSH (Secure Shell) ist ein verschlüsseltes Protokoll zur Verwaltung und Kommunikation mit Servern. Wenn Sie mit einem Linux-Server arbeiten, verbringen Sie die meiste Zeit in einer Terminalsitzung, die über SSH mit Ihrem Server verbunden ist.

In dieser Anleitung konzentrieren wir uns auf die Einrichtung von SSH-Schlüsseln. SSH-Schlüssel bieten eine einfache, aber extrem sichere Möglichkeit der Anmeldung an Ihrem Server. Aus diesem Grund ist dies die Methode, die wir für alle Benutzer empfehlen.


Wie funktionieren SSH-Schlüssel?

Ein SSH-Server kann Clients mit verschiedenen Methoden authentifizieren. Die grundlegendste ist die Passwort-Authentifizierung, die einfach zu verwenden, aber nicht die sicherste ist.

Obwohl Passwörter sicher an den Server gesendet werden, sind sie oft nicht komplex genug, um wiederholten Brute-Force-Angriffen zu widerstehen. SSH-Schlüssel erweisen sich als zuverlässigere und sichere Alternative.

Ein SSH-Schlüsselpaar besteht aus zwei kryptografisch sicheren Schlüsseln:

  • Privater Schlüssel: Wird vom Client aufbewahrt und sollte absolut geheim gehalten werden. Kann zusätzlich mit einer Passphrase verschlüsselt werden.
  • Öffentlicher Schlüssel: Kann ohne negative Folgen geteilt werden. Wird auf dem Server in die Datei ~/.ssh/authorized_keys eingefügt.

Der Authentifizierungsprozess

Wenn ein Client die Authentifizierung mit SSH-Schlüsseln versucht, kann der Server den Client testen, ob er im Besitz des privaten Schlüssels ist. Wenn der Client dies beweisen kann, wird eine Shell-Sitzung erzeugt.


Schritt 1: SSH-Schlüsselpaar erstellen

Der erste Schritt ist die Erstellung eines SSH-Schlüsselpaares auf Ihrem lokalen Computer. Dazu verwenden wir das Tool ssh-keygen, das standardmäßig in den meisten Linux-Distributionen enthalten ist.

ssh-keygen

Standardmäßig generiert dies ein 2048-Bit RSA-Schlüsselpaar. Sie können aber auch stärkere Schlüssel erstellen:

# Ed25519 (empfohlen, moderner und sicherer)
ssh-keygen -t ed25519

# Oder 4096-Bit RSA
ssh-keygen -t rsa -b 4096

Während der Generierung werden Sie aufgefordert:

  1. Speicherort: Drücken Sie Enter, um den Standardpfad (~/.ssh/id_rsa oder ~/.ssh/id_ed25519) zu akzeptieren.
  2. Passphrase: Geben Sie eine Passphrase ein, um den privaten Schlüssel zu schützen (empfohlen für zusätzliche Sicherheit).

Ihr öffentlicher Schlüssel wird nun unter ~/.ssh/id_rsa.pub (bzw. ~/.ssh/id_ed25519.pub) gespeichert.


Schritt 2: Öffentlichen Schlüssel auf den Server kopieren

Jetzt müssen Sie den öffentlichen Schlüssel auf Ihren Remote-Server übertragen. Die einfachste Methode ist ssh-copy-id:

Methode 1: Mit ssh-copy-id (empfohlen)

ssh-copy-id username@remote_host

Sie werden aufgefordert:

  1. Die Verbindung zum Server bestätigen (geben Sie yes ein)
  2. Das Passwort für das Benutzerkonto auf dem Server eingeben

Der öffentliche Schlüssel wird automatisch zur Datei ~/.ssh/authorized_keys auf dem Server hinzugefügt.

Methode 2: Manuelles Kopieren (falls ssh-copy-id nicht verfügbar)

Zeigen Sie den Inhalt Ihres öffentlichen Schlüssels an:

cat ~/.ssh/id_rsa.pub

Kopieren Sie den gesamten Inhalt und melden Sie sich am Server an. Erstellen Sie dann das Verzeichnis und fügen Sie den Schlüssel hinzu:

mkdir -p ~/.ssh
echo "IHR_OEFFENTLICHER_SCHLUESSEL" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Schritt 3: SSH-Schlüssel-Authentifizierung testen

Versuchen Sie, sich nun mit Ihrem Server zu verbinden:

ssh username@remote_host

Wenn Sie beim Erstellen des Schlüssels eine Passphrase festgelegt haben, werden Sie nach dieser gefragt. Andernfalls werden Sie direkt angemeldet, ohne ein Passwort eingeben zu müssen.


Schritt 4: Passwort-Authentifizierung deaktivieren (optional, aber empfohlen)

Sobald Sie sicher sind, dass die Schlüssel-Authentifizierung funktioniert, sollten Sie die Passwort-Authentifizierung deaktivieren, um die Sicherheit zu erhöhen.

Melden Sie sich am Server an und bearbeiten Sie die SSH-Konfiguration:

sudo nano /etc/ssh/sshd_config

Suchen Sie nach der Zeile PasswordAuthentication und ändern Sie sie zu:

PasswordAuthentication no

Speichern Sie die Datei (Ctrl+O, dann Enter) und beenden Sie nano (Ctrl+X). Starten Sie den SSH-Dienst neu:

sudo systemctl restart ssh

# oder auf älteren Systemen:
sudo service ssh restart

Wichtig: Lassen Sie Ihre aktuelle SSH-Sitzung geöffnet! Testen Sie die Schlüssel-Authentifizierung in einem neuen Terminal-Fenster, bevor Sie die Verbindung trennen.


SSH-Agent verwenden

Um die Passphrase nicht bei jeder Verbindung eingeben zu müssen, können Sie den SSH-Agent verwenden:

# Agent im Hintergrund starten
eval $(ssh-agent)

# Privaten Schlüssel hinzufügen
ssh-add ~/.ssh/id_rsa

Geben Sie Ihre Passphrase ein. Der Schlüssel bleibt so lange im Speicher, bis Sie sich abmelden oder den Agenten beenden.


Fazit

Sie haben jetzt die SSH-Schlüssel-basierte Authentifizierung auf Ihrem Linux-Server konfiguriert. Dies ermöglicht Ihnen eine sichere Anmeldung ohne Passwörter.

Vorteile der SSH-Schlüssel-Authentifizierung:

  • Keine Übertragung von Passwörtern über das Netzwerk
  • Schutz vor Brute-Force-Angriffen
  • Möglichkeit zur Automatisierung von Skripten
  • Einfachere und schnellere Anmeldung