Nachfolgend findest du die einzelnen Schritte, um deine SSH-Verbindung zu einem Server mithilfe eines Zertifikats (SSH-Schlüssels) abzusichern.
1. SSH-Schlüssel erstellen
Öffne das Terminal auf deinem Mac (oder Linux-System) und verwende folgenden Befehl, um ein SSH-Schlüsselpaar zu erstellen:
ssh-keygen -t ed25519 -C "deine_email@example.com"
- Der Parameter
-t ed25519
legt fest, dass ED25519 als Verschlüsselungsalgorithmus verwendet wird. - Mit
-C "deine_email@example.com"
kannst du einen Kommentar hinzufügen, z. B. deine E-Mail-Adresse.
Du wirst gefragt, wo der Schlüssel gespeichert werden soll. Der Standardpfad ist ~/.ssh/id_ed25519
. Ich empfehle, den Schlüssel nach dem Server zu benennen, z. B. ~/.ssh/servername
. Du kannst das Passwort leer lassen, wenn du den Schlüssel nicht zusätzlich schützen möchtest – ansonsten lege eines fest.
2. Öffentlichen Schlüssel auf den Linux-Rechner kopieren
Sobald der Schlüssel erstellt wurde, kannst du den öffentlichen Schlüssel (~/.ssh/id_ed25519.pub
) auf deinen SSH-Host hochladen:
ssh-copy-id benutzername@hostname
Dies kopiert den Inhalt des öffentlichen Schlüssels in die Datei ~/.ssh/authorized_keys
auf dem Linux-Rechner.
Ersetze benutzername
und hostname
durch den Benutzernamen und Hostnamen bzw. die IP-Adresse des Zielsystems.
3. Manuelles Kopieren des SSH-Schlüssels
Falls ssh-copy-id
nicht verfügbar ist, kannst du den öffentlichen Schlüssel auch manuell kopieren:
Öffne den öffentlichen Schlüssel auf deinem Mac:
cat ~/.ssh/id_rsa.pub
Kopiere den angezeigten Schlüsselinhalt und füge ihn auf dem Linux-Rechner in die Datei ~/.ssh/authorized_keys
ein. Du kannst diese Datei auf dem Linux-Rechner wie folgt bearbeiten:
nano ~/.ssh/authorized_keys
Füge den Schlüssel in einer neuen Zeile ein und speichere die Datei.
4. Testen der Verbindung
Teste die SSH-Verbindung:
ssh benutzername@hostname
Wenn alles korrekt eingerichtet ist, solltest du dich ohne Passwortabfrage anmelden können.
5. Passwort-Login auf dem Linux-Host deaktivieren
Wichtig: Vergewissere dich vorab, dass der Login mit SSH-Schlüssel funktioniert.
Andernfalls riskierst du, dich vom Server auszusperren.
Bearbeite auf dem Server die Datei:
sudo nano /etc/ssh/sshd_config
Füge folgende Einstellungen hinzu bzw. passe sie an:
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
Erklärung:
PubkeyAuthentication yes
: Aktiviert die Anmeldung per SSH-Schlüssel.PasswordAuthentication no:
Deaktiviert die Anmeldung per Passwort.KbdInteractiveAuthentication no:
Verhindert passwortähnliche Eingabeverfahren.PermitRootLogin prohibit-password:
Erlaubt Root-Zugriff nur per Schlüssel, nicht mit Passwort.
Starte den SSH-Dienst neu:
sudo systemctl restart ssh
Öffne ein neues Terminalfenster und teste die Verbindung erneut, bevor du die aktuelle Sitzung beendest.
Konfiguration des SSH-Profils auf dem Mac
Um den Verbindungsaufbau weiter zu vereinfachen, kannst du auf deinem Mac eine SSH-Konfigurationsdatei mit Profil-Einträgen anlegen.
Bearbeite die Datei ~/.ssh/config
:
nano ~/.ssh/config
Beispielkonfiguration:
Host hostname
Hostname host.domain.com
User username
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 15
ServerAliveCountMax 12
- Host: Definiert entweder den Hostnamen oder einen Alias für den SSH-Zielserver. Falls du einen Alias definieren willst, dann musst du zusätzlich die Option
HostName host.domain.com
als Parameter hinzufügen. - User: Gibt den Benutzernamen an, mit dem du dich auf dem Server anmelden möchtest. Spart dir die manuelle Eingabe bei jeder Verbindung.
- IdentityFile: Pfad zum privaten SSH-Schlüssel, der für die Authentifizierung verwendet wird. Er sollte zu einem auf dem Server hinterlegten öffentlichen Schlüssel passen.
- ServerAliveInterval: Gibt an, in welchem Zeitintervall (in Sekunden) der Client ein Keep-Alive-Signal an den Server sendet, um Verbindungsabbrüche durch Inaktivität zu vermeiden.
- ServerAliveCountMax: Bestimmt, wie oft ein Keep-Alive-Signal erfolglos gesendet werden darf, bevor der Client die Verbindung trennt. Multipliziert mit
ServerAliveInterval
ergibt sich die maximale Ausfallzeit in Sekunden.