SSH-Zugang absichern
Ein frisch aufgesetzter Server wird innerhalb weniger Minuten automatisiert nach offenen SSH-Ports durchsucht und mit Anmeldeversuchen bombardiert. Mit wenigen Handgriffen fällt dieser gesamte Angriffsweg weg.
Der Kern ist schnell erzählt: Anmeldung per Schlüssel statt Passwort, danach Passwortanmeldung und Root-Login abschalten.
Voraussetzungen
- Zugriff auf den Server per SSH
- Root-Rechte bzw. ein Benutzer mit
sudo - Ein Terminal auf deinem lokalen Rechner
Zweites Terminal offen halten
Lass während der gesamten Anleitung eine funktionierende SSH-Sitzung offen. Jede Änderung testest du in einem neuen Fenster. Nur so kommst du bei einem Fehler noch an den Server heran.
Schritt 1: SSH-Schlüssel erzeugen
Auf deinem lokalen Rechner — nicht auf dem Server:
ssh-keygen -t ed25519 -C "mein-notebook"Bestätige den vorgeschlagenen Pfad mit Enter und vergib eine Passphrase. Sie schützt den Schlüssel, falls dein Rechner in falsche Hände gerät.
Es entstehen zwei Dateien:
~/.ssh/id_ed25519— der private Schlüssel, bleibt für immer auf deinem Rechner~/.ssh/id_ed25519.pub— der öffentliche Schlüssel, kommt auf den Server
Privaten Schlüssel niemals weitergeben
Der private Schlüssel wird nie kopiert, nie verschickt und nie auf den Server gelegt. Wer ihn besitzt, kommt auf deinen Server.
Schritt 2: Schlüssel auf den Server übertragen
ssh-copy-id benutzer@deine-server-ipDu wirst noch einmal nach dem Passwort gefragt — danach nicht mehr.
Steht ssh-copy-id nicht zur Verfügung (etwa unter Windows), geht es auch manuell:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh benutzer@server-ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"Teste jetzt in einem neuen Fenster:
ssh benutzer@deine-server-ipDie Anmeldung muss ohne Serverpasswort funktionieren. Erst wenn das klappt, geht es weiter.
Schritt 3: Passwortanmeldung abschalten
sudo nano /etc/ssh/sshd_configSetze bzw. ändere diese Werte:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication noEingebundene Konfigurationsdateien beachten
Auf Debian 12 und Ubuntu 22.04+ lädt die sshd_config am Anfang zusätzliche Dateien aus /etc/ssh/sshd_config.d/. Ein dortiger Eintrag überschreibt deine Änderung. Prüfe deshalb:
grep -r "PasswordAuthentication" /etc/ssh/sshd_config.d/Konfiguration auf Syntaxfehler prüfen und erst dann übernehmen:
sudo sshd -t && sudo systemctl restart sshBricht sshd -t mit einer Meldung ab, wird der Dienst gar nicht erst neu gestartet — deine bestehende Verbindung bleibt erhalten.
Prüfe anschließend, was wirklich aktiv ist:
sudo sshd -T | grep -E "permitrootlogin|passwordauthentication"Schritt 4: Weitere Härtung
Diese Einstellungen sind optional, aber sinnvoll:
MaxAuthTries 3
LoginGraceTime 20
AllowUsers deinbenutzer
X11Forwarding noAllowUsers ist besonders wirksam: Nur die dort genannten Benutzer dürfen sich überhaupt anmelden.
SSH-Port ändern
Ein anderer Port verhindert keinen gezielten Angriff, reduziert aber das Grundrauschen automatisierter Scans deutlich.
Port 2222Vorher unbedingt in der Firewall freigeben:
sudo ufw allow 2222/tcp
sudo sshd -t && sudo systemctl restart sshSocket-Aktivierung unter Ubuntu
Ab Ubuntu 22.10 wird SSH über ein systemd-Socket gestartet. Die Zeile Port in der sshd_config bleibt dort wirkungslos. Setze den Port stattdessen so:
sudo systemctl edit ssh.socket[Socket]
ListenStream=
ListenStream=2222sudo systemctl daemon-reload
sudo systemctl restart ssh.socketVerbinden dich danach mit:
ssh -p 2222 benutzer@server-ipNächste Schritte
- UFW installieren und konfigurieren — nur benötigte Ports offen halten
- Fail2ban installieren — auffällige IP-Adressen automatisch sperren
Troubleshooting
Permission denied (publickey): Der Schlüssel liegt nicht in~/.ssh/authorized_keysdes richtigen Benutzers, oder die Rechte stimmen nicht:chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys- Änderung wirkt nicht: Ein Eintrag in
/etc/ssh/sshd_config.d/überschreibt sie. Mitsudo sshd -Tprüfen, was gilt. - Ausgesperrt: Über die Konsole im ForgeHost Dashboard anmelden und die Konfiguration zurücksetzen.
- Nach Portwechsel keine Verbindung: Firewall-Freigabe fehlt, oder unter Ubuntu greift die Socket-Aktivierung.