SSH absichern: Checkliste zur Härtung eines Linux-VPS
SSH auf einem neuen VPS mit Ubuntu 24.04 absichern: Schlüssel, sshd-Optionen, UFW und Fail2ban, mit einem Test pro Schritt, damit Sie sich nicht aussperren.
Diese Checkliste zur SSH-Härtung zeigt, wie Sie SSH auf einem neuen VPS mit Ubuntu 24.04 LTS absichern. Anfangs melden Sie sich als root mit Passwort an, am Ende nur noch mit einem persönlichen Benutzerkonto und ausschließlich per Schlüssel; eine Firewall und Fail2ban schützen den Zugang. Zu jedem riskanten Schritt gehört ein Test, den Sie ausführen, während Ihre aktuelle Sitzung geöffnet bleibt. Wo sich Debian 12 unterscheidet, steht ein Hinweis dabei. Läuft auf Ihrem Server Windows, behandeln unsere Tipps zur Absicherung von Remote Desktop dieselben Punkte für RDP.
Die Checkliste zur SSH-Härtung im Überblick
Die SSH-Härtung eines neuen Servers umfasst elf Schritte, und es kommt auf die Reihenfolge an: Die Anmeldung per Schlüssel muss für einen sudo-Benutzer funktionieren, bevor Sie Root- und Passwort-Logins abschalten, und SSH muss freigegeben sein, bevor Sie die Firewall einschalten.
| Schritt | Risiko, sich auszusperren |
|---|---|
| 1. Automatische Sicherheitsupdates | Keines |
| 2. Ein sudo-Benutzer | Keines |
| 3–4. Anmeldung per SSH-Schlüssel | Keines |
| 5–7. Kein Root-Login, keine Passwörter | Ja: zweite Anmeldung testen |
| 8. Ein neuer SSH-Port (optional) | Ja |
| 9. Firewall mit UFW | Ja |
| 10. Fail2ban | Kann Ihre eigene Adresse sperren |
| 11. Ungenutzte Dienste abschalten | Keines |
Den Server vorbereiten: Updates und ein sudo-Benutzer
Wenn Sie als root arbeiten, können Sie sudo in den ersten beiden Schritten weglassen. Ersetzen Sie in der gesamten Anleitung deploy durch Ihren Benutzernamen und 203.0.113.10 durch die IP-Adresse Ihres Servers.
1. System aktualisieren und automatische Sicherheitsupdates einschalten
Installieren Sie zuerst die ausstehenden Updates: apt update aktualisiert die Paketlisten, apt upgrade installiert die neuen Paketversionen. [1]
sudo apt update
sudo apt upgradeUnter Ubuntu werden Sicherheitsupdates automatisch über das Paket unattended-upgrades installiert. Es ist standardmäßig vorhanden und läuft einmal täglich. Beide Werte in /etc/apt/apt.conf.d/20auto-upgrades sollten „1“ lauten, und ein Probelauf zeigt, was installiert würde. [1]
cat /etc/apt/apt.conf.d/20auto-upgrades
sudo unattended-upgrade --dry-run -vAPT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";Einen Neustart führt unattended-upgrades nicht selbst aus, denn Unattended-Upgrade::Automatic-Reboot steht standardmäßig auf „false“. Starten Sie den Server deshalb von Hand neu, wenn ein Update das verlangt. [1] Fehlt unter Debian 12 das Paket oder die Datei, installieren Sie unattended-upgrades und legen die Datei mit den beiden oben gezeigten Zeilen an.
2. Einen eigenen Benutzer mit sudo-Rechten anlegen
Erledigen Sie Verwaltungsaufgaben unter einem persönlichen Benutzerkonto mit sudo. Dabei fragt sudo nach dem eigenen Passwort dieses Benutzers, nicht nach dem Root-Passwort. Mitglieder der Gruppe sudo erhalten darüber vollen Root-Zugriff. [2]
sudo adduser deploy
sudo adduser deploy sudoDer Befehl adduser fragt nach einem Passwort und einigen optionalen Angaben. [2] Wählen Sie ein langes Passwort: SSH wird zwar Schlüssel verwenden, aber sudo fragt weiterhin danach. Prüfen Sie anschließend das Konto; sudo whoami sollte root ausgeben.
su - deploy
sudo whoamiFehlt unter Debian 12 der Befehl sudo, installieren Sie ihn zuerst als root mit apt install sudo.
Anmeldung per SSH-Schlüssel einrichten
3. Einen ed25519-Schlüssel auf Ihrem Computer erzeugen
Erzeugen Sie das Schlüsselpaar auf Ihrem eigenen Computer, nicht auf dem Server. Ubuntu empfiehlt den Typ ed25519, weil seine Schlüssel kürzer sind und weniger Rechenaufwand erfordern. Beim Erzeugen fragt ssh-keygen nach einer Passphrase, die den privaten Schlüssel schützt. [3]
ssh-keygen -t ed25519Übernehmen Sie den vorgeschlagenen Dateinamen. Der private Schlüssel liegt in ~/.ssh/id_ed25519, der öffentliche Schlüssel, den Sie auf Server kopieren, in ~/.ssh/id_ed25519.pub. [3]
Unter Windows führen Sie denselben Befehl in der PowerShell aus; er speichert das Schlüsselpaar im Ordner .ssh Ihres Benutzerprofils. Microsoft rät von einer leeren Passphrase ab und warnt, dass sich jeder, der an den privaten Schlüssel gelangt, als Sie anmelden kann. [4]
ssh-keygen -t ed255194. Den öffentlichen Schlüssel auf den Server kopieren
Unter Linux und macOS hängt ssh-copy-id Ihren öffentlichen Schlüssel an die Datei ~/.ssh/authorized_keys des Benutzers auf dem Server an. [3]
ssh-copy-id deploy@203.0.113.10In der Anleitung von Microsoft werden Schlüssel stattdessen mit PowerShell oder scp kopiert. [4] Für einen Linux-Server hängt diese Zeile Ihren Schlüssel an und setzt die Rechte so, dass nur Sie in den Ordner und die Datei schreiben können:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh deploy@203.0.113.10 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"Bevor sshd eine Anmeldung annimmt, prüft es diese Rechte über die Option StrictModes, die standardmäßig aktiv ist. [5] Führen Sie dann in einem neuen Terminal ssh deploy@203.0.113.10 aus: Die Anmeldung sollte ohne das Passwort des Kontos gelingen. Falls nicht, verfolgen Sie das SSH-Log des Servers, während Sie es erneut versuchen: [3]
sudo journalctl -fu ssh.servicesshd absichern: Root-Login, Passwörter und Benutzer
Die nächsten Schritte schalten Root- und Passwort-Logins ab. Beginnen Sie erst, wenn Ihre Anmeldung per Schlüssel als neuer Benutzer funktioniert, und lassen Sie diese Sitzung offen, bis eine zweite Anmeldung gelingt.
5. Eigene Einstellungen in eine Drop-in-Datei schreiben
Unter Ubuntu beginnt /etc/ssh/sshd_config mit Include /etc/ssh/sshd_config.d/*.conf, und OpenSSH übernimmt bei den meisten Einstellungen den ersten Wert, den es liest. Dateien in diesem Ordner haben deshalb Vorrang vor der Hauptdatei. [3] Eingebundene Dateien werden in lexikalischer Reihenfolge gelesen, und für jedes Schlüsselwort gilt der erste Wert, den sshd erhält. [5] Nennen Sie Ihre Datei daher 00-hardening.conf.
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
AllowUsers deployWas die Optionen laut der Manpage von sshd_config bewirken:
- PermitRootLogin no verhindert, dass sich root per SSH anmeldet. Der Standardwert prohibit-password lehnt für root Passwörter ab, nimmt aber weiterhin Schlüssel an. [5]
- PasswordAuthentication no schaltet die Anmeldung per Passwort ab, die standardmäßig erlaubt ist. [5]
- KbdInteractiveAuthentication no schaltet die tastaturinteraktive Anmeldung (keyboard-interactive) ab, ein eigenes Verfahren, das ebenfalls standardmäßig aktiv ist. Früher hieß die Option ChallengeResponseAuthentication. [5]
- AllowUsers deploy (optional) erlaubt nur den aufgeführten Benutzern die Anmeldung. Anders als bei den meisten Schlüsselwörtern ergänzt jede AllowUsers-Zeile die Liste. [5] Schreiben Sie den Namen exakt richtig, sonst kann sich niemand mehr anmelden.
Behandeln Sie das sudo-Konto ab jetzt wie root: Laut den Hinweisen zum openssh-Paket von Ubuntu ist jedes Konto, von dem aus Sie Root-Rechte erlangen können, aus Sicht eines Angreifers von außen gleichwertig mit root. [6] Prüfen Sie unter Debian 12 zuerst mit grep -n Include /etc/ssh/sshd_config, ob die Include-Zeile vorhanden ist.
6. Nach Dateien suchen, die Passwort-Logins wieder erlauben
Da der erste Wert gilt, hat jede Datei Vorrang, die in der Sortierung vor Ihrer steht. Durchsuchen Sie den Ordner:
ls /etc/ssh/sshd_config.d/
sudo grep -riE 'passwordauthentication|kbdinteractive|permitrootlogin|allowusers' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/Auf Cloud-Images schreibt cloud-init die SSH-Einstellungen, die es verwaltet, in /etc/ssh/sshd_config.d/50-cloud-init.conf, sofern sshd_config diesen Ordner einbindet. [7] Steht in dieser Datei PasswordAuthentication yes, setzt sie sich gegen jede Datei durch, die nach ihr einsortiert ist. Deshalb beginnt der Name Ihrer Datei mit 00. Ändern Sie den Wert dort ebenfalls auf no, damit die Dateien übereinstimmen.
7. Konfiguration testen und SSH neu starten
Testen Sie die Dateien vor dem Neustart: Eine fehlerhafte Einstellung kann den Start von sshd verhindern, und SSH ist womöglich Ihr einziger Zugang. [3]
sudo sshd -t
sudo systemctl restart ssh.serviceBeheben Sie zuerst alles, was sshd -t meldet. Lassen Sie nach dem Neustart Ihre Sitzung offen und testen Sie von einem zweiten Terminal aus:
ssh deploy@203.0.113.10
ssh root@203.0.113.10Die erste Anmeldung sollte funktionieren, die zweite abgewiesen werden. Schlägt Ihre Anmeldung fehl, machen Sie die Änderung in der offenen Sitzung rückgängig und prüfen das SSH-Log aus Schritt 4. [3]
Sollten Sie den SSH-Port ändern?
Nur, wenn Sie weniger Einträge in Ihren Logs möchten. Mit einem neuen Port läuft SSH nicht mehr auf dem Standardport 22, [5] und Bots, die nur Port 22 probieren, finden es nicht. Ein Scan aller Ports findet SSH aber trotzdem. Den eigentlichen Schutz bieten Schlüssel und die abgeschaltete Passwort-Anmeldung.
8. Den Port unter Ubuntu 24.04 ändern (optional)
Ist UFW oder eine andere Firewall bereits aktiv, geben Sie zuerst den neuen Port frei. Lassen Sie Ihre Sitzung offen, bis eine Anmeldung über den neuen Port funktioniert.
Unter Ubuntu 24.04 lauscht ssh.socket per systemd-Socket-Aktivierung auf Port 22. Ein Generator wandelt die Port-Zeilen aus sshd_config und den zugehörigen Drop-in-Dateien in Socket-Einstellungen um. Nach einer Portänderung lassen Sie systemd deshalb seine Konfiguration neu einlesen und starten ssh.socket neu. [6]
Da sshd mehrere Port-Zeilen akzeptiert, [5] behalten Sie Port 22, während Sie den neuen Port testen:
Port 22
Port 2222sudo sshd -t
sudo systemctl daemon-reload
sudo systemctl restart ssh.socketTesten Sie den neuen Port von einem zweiten Terminal aus. Löschen Sie danach die Zeile Port 22, wiederholen Sie die drei Befehle und verwenden Sie in den Schritten 9 und 10 Port 2222.
ssh -p 2222 deploy@203.0.113.10Prüfen Sie unter Debian 12 zuerst, ob der Socket genutzt wird. Ist er inaktiv, genügt ein Neustart des Dienstes, damit die Änderung greift.
systemctl is-active ssh.socket
sudo systemctl restart ssh.serviceFirewall, Fail2ban und offene Ports
9. SSH in UFW freigeben, dann UFW aktivieren
Das Aktivieren von UFW kann Ihre SSH-Sitzung trennen, und danach blockiert UFW jeden Port, den Sie nicht freigegeben haben. Legen Sie die SSH-Regel an, bevor Sie ufw enable ausführen.
UFW ist nach der Installation zunächst deaktiviert; sobald Sie es aktivieren, weist es eingehenden Traffic standardmäßig ab. Die Manpage warnt, dass ufw enable SSH-Verbindungen trennen kann; legen Sie die SSH-Regel deshalb zuerst an. [8]
Verwenden Sie für SSH limit statt allow. Eine limit-Regel lässt Verbindungen weiterhin zu, weist aber eine Adresse ab, die innerhalb von 30 Sekunden 6 oder mehr Verbindungen aufzubauen versucht. Legen Sie nicht beide Regeln an, denn UFW wendet die erste passende Regel an. [8]
sudo ufw limit 22/tcp
sudo ufw enable
sudo ufw status verboseWenn Sie UFW über SSH aktivieren, fragt es nach einer Bestätigung. [8] Haben Sie SSH auf einen anderen Port verlegt, setzen Sie die limit-Regel stattdessen für 2222/tcp. Fehlt unter Debian 12 der Befehl, installieren Sie UFW zuerst. Soll SSH gar nicht aus dem öffentlichen Internet erreichbar sein, greifen Sie nur noch über ein privates WireGuard-Netzwerk darauf zu. Für Schutz, der schon vor dem Server ansetzt, lesen Sie unsere Checkliste zum DDoS-Schutz für VPS.
10. Fail2ban mit dem sshd-Jail einrichten
Fail2ban kann nach wiederholten fehlgeschlagenen Anmeldungen Ihre eigene IP-Adresse sperren. Tragen Sie Ihre feste IP-Adresse in ignoreip ein, falls Sie eine haben, und lassen Sie Ihre Sitzung offen, während Sie testen.
Unter Ubuntu 24.04 bringt das Paket die Datei /etc/fail2ban/jail.d/defaults-debian.conf mit. Sie aktiviert das sshd-Jail, setzt backend = systemd und legt fest, dass Fail2ban über nftables sperrt. [9] Das systemd-Backend liest das systemd-Journal, das Jail braucht also keine eigene Logdatei. [10]
sudo apt install fail2ban
cat /etc/fail2ban/jail.d/defaults-debian.confMit den Standardwerten aus der mitgelieferten jail.conf sperrt Fail2ban eine Adresse für 10 Minuten, sobald sie innerhalb von 10 Minuten 5 Fehlversuche hatte. Die Datei selbst rät davon ab, sie zu bearbeiten: Eigene Änderungen gehören in jail.local. [10]
[sshd]
enabled = true
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
ignoreip = 127.0.0.1/8 ::1 198.51.100.7Ersetzen Sie 198.51.100.7 durch Ihre eigene feste Adresse oder löschen Sie den Eintrag. Das Standard-Jail verwendet port = ssh; haben Sie SSH auf einen anderen Port verlegt, ergänzen Sie port = 2222. [10] Unter Debian 12 behalten Sie hier backend = systemd bei und installieren python3-systemd, die Python-Bibliothek für systemd, die dieses Backend nutzt. [10] Starten Sie Fail2ban danach neu und prüfen Sie, ob es läuft:
sudo systemctl restart fail2ban
sudo systemctl status fail2ban11. Prüfen, was sonst noch lauscht
Jeder offene Port ist ein weiterer möglicher Zugang. Der folgende UFW-Befehl zeigt jeden TCP-Port, auf dem ein Dienst lauscht, und jeden offenen UDP-Port, jeweils mit der Adresse (* steht für alle Schnittstellen), dem Programm dahinter und den Regeln, die dafür gelten. [8]
sudo ufw show listeningEin an 127.0.0.1 gebundener Dienst ist nur vom Server selbst aus erreichbar. Öffentlich erreichbare Dienste, die Sie nicht brauchen, schalten Sie mit systemctl disable --now ab, so wie es die Hinweise zum openssh-Paket von Ubuntu für ssh.socket zeigen. [6]
sudo systemctl disable --now SERVICE_NAMEWenn Sie sich ausgesperrt haben
Die meisten Aussperrungen entstehen, weil die letzte funktionierende Sitzung zu früh geschlossen wurde. Falls es Ihnen trotzdem passiert:
- Nutzen Sie eine noch offene Sitzung, um die letzte Änderung rückgängig zu machen,
sshd -tauszuführen und SSH neu zu starten. - Warten Sie kurz, wenn UFW Sie abgewiesen hat: Die limit-Regel zählt die Versuche über einen Zeitraum von 30 Sekunden. [8]
- Warten Sie eine Fail2ban-Sperre ab: Sie dauert so lange, wie
bantimefestlegt, mit derjail.localvon oben also eine Stunde. [10] Alternativ verbinden Sie sich aus einem anderen Netz, etwa über den Hotspot Ihres Smartphones. - Setzen Sie den Server als letzten Ausweg neu auf. Bei StealthRDP erklärt das Hilfe-Center, wie Sie einen Server im Kundenbereich neu aufsetzen: Betriebssystem wählen, 3 bis 5 Minuten warten und sich per SSH verbinden. Beim Neuaufsetzen wird ein frisches System installiert, Ihre Daten spielen Sie also aus einem Backup zurück. Unsere Anleitung zu automatischen VPS-Backups hilft Ihnen, rechtzeitig eines einzurichten.
Unsicher? Der Support von StealthRDP ist rund um die Uhr per Telegram, über Tickets im Kundenbereich und unter info@stealthrdp.com erreichbar.
Häufige Fragen
Was ist SSH-Härtung?
SSH-Härtung bedeutet, die Einstellungen des SSH-Servers so zu ändern, dass weniger Konten und Anmeldemethoden Zugang erhalten: Schlüssel statt Passwörtern, kein Root-Login und optional nur ausdrücklich zugelassene Benutzer. OpenSSH lässt standardmäßig Passwort- und tastaturinteraktive Anmeldungen (keyboard-interactive) zu, deshalb nehmen Sie sich diese zuerst vor. [5]
Warum wirkt PasswordAuthentication no unter Ubuntu nicht?
Vermutlich setzt eine andere Datei den Wert vorher. Die sshd_config von Ubuntu bindet /etc/ssh/sshd_config.d/ ganz oben ein, und OpenSSH behält den ersten Wert, den es findet. [3] Prüfen Sie auf Cloud-Images dort die Datei 50-cloud-init.conf, in die cloud-init seine SSH-Einstellungen schreibt. [7]
Erhöht ein anderer SSH-Port die Sicherheit?
Nur wenig. Mit einem anderen Port läuft SSH nicht mehr auf dem Standardport 22, sodass Bots, die nur diesen Port probieren, es übersehen. Ein vollständiger Portscan findet SSH aber trotzdem. [5] Schlüssel und die abgeschaltete Passwort-Anmeldung bringen weit mehr.
Sollte ich den Root-Login per SSH abschalten?
Ja, sobald sich ein sudo-Benutzer per Schlüssel anmelden kann. PermitRootLogin no weist root vollständig ab, während der Standardwert prohibit-password Schlüssel für root weiterhin akzeptiert. [5] Die Hinweise zum openssh-Paket von Ubuntu ergänzen, dass Ihr sudo-Konto dieselbe Sorgfalt verdient wie root. [6]
Brauche ich Fail2ban, wenn SSH nur Schlüssel zulässt?
Nicht zwingend, aber nützlich: Fail2ban sperrt Adressen, von denen aus Anmeldungen wiederholt fehlschlagen, standardmäßig nach 5 Fehlversuchen innerhalb von 10 Minuten. [10] Unter Ubuntu 24.04 aktiviert das Paket sein sshd-Jail von Haus aus. [9]
Ist UFW unter Ubuntu standardmäßig aktiv?
Nein. UFW ist nach der Installation zunächst deaktiviert; sobald Sie es aktivieren, weist es alle eingehenden Verbindungen ab, die keine Regel erlaubt. [8] Legen Sie eine Regel für SSH an, bevor Sie ufw enable ausführen.
Quellen und Referenzen
- Automatic updates — Ubuntu Server documentation (abgerufen am 2026-11-03)
- User management — Ubuntu Server documentation (abgerufen am 2026-11-03)
- OpenSSH server — Ubuntu Server documentation (abgerufen am 2026-11-03)
- Key-based authentication in OpenSSH for Windows — Microsoft Learn (abgerufen am 2026-11-03)
- sshd_config(5): OpenSSH daemon configuration file — OpenBSD manual pages (abgerufen am 2026-11-03)
- openssh: debian/README.Debian (ubuntu/noble-updates) — Ubuntu (Launchpad) (abgerufen am 2026-11-03)
- cloudinit/ssh_util.py — GitHub (canonical/cloud-init) (abgerufen am 2026-11-03)
- ufw - program for managing a netfilter firewall — Ubuntu Manpages (abgerufen am 2026-11-03)
- fail2ban: debian/debian-files/jail.d_defaults-debian.conf (ubuntu/noble-updates) — Ubuntu (Launchpad) (abgerufen am 2026-11-03)
- fail2ban 1.0.2: config/jail.conf — GitHub (fail2ban/fail2ban) (abgerufen am 2026-11-03)
Weiterlesen
VPS Control Panel Vergleich: 6 Tools für kleine Unternehmen
VPS Control Panel Vergleich: Preise und Funktionen von Plesk, cPanel, Webmin, Virtualmin und DirectAdmin, mit Entscheidungshilfe für kleine Unternehmen.
Hochverfügbare Server: Automatisches Failover auf dem VPS
Hochverfügbarkeit-Server auf VPS-Basis planen: Redundanz, Replikation, automatisches Failover, Monitoring und Vergleich mit der Cloud.
Server-Monitoring-Tools: 7 Uptime-Monitore im Vergleich
Server-Monitoring-Tools für Uptime-Prüfungen im Vergleich: gehostete Dienste und Self-hosted-Optionen wie Uptime Kuma, mit Hinweisen zu Alarmen.
