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_keyseingefü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:
- Speicherort: Drücken Sie Enter, um den Standardpfad (
~/.ssh/id_rsaoder~/.ssh/id_ed25519) zu akzeptieren. - 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:
- Die Verbindung zum Server bestätigen (geben Sie
yesein) - 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