Was es schützt und was nicht
Ein neuer Port stoppt die automatischen Scans, die nur Port 22 probieren, Ihre Logs werden also deutlich ruhiger. Das ist der ganze Nutzen. Ein Scan aller Ports findet SSH trotzdem, denn der Server meldet sich, sobald sich etwas verbindet. Schwache Passwörter bleiben auf jedem Port schwach. Erledigen Sie zuerst, was wirklich zählt: Passwort-Anmeldung abschalten und die sshd-Konfiguration prüfen.
Es hat auch kleine Kosten: Jedes Werkzeug braucht jetzt den Port, und Ihre known_hosts behandelt den neuen Port als neuen Eintrag, Sie bestätigen den Fingerabdruck also erneut.
Wählen Sie einen Port, den nichts anderes benutzt. Ports unter 1024 kann nur Root öffnen, was ein kleiner Vorteil ist, falls sshd je ausfällt.
1. Einen Rückweg offen halten
Lassen Sie Ihre aktuelle Sitzung bis zum letzten Schritt offen. Eine bestehende Sitzung überlebt einen Neustart von sshd normalerweise, sie ist also Ihr Rückweg. Wenn Sie über Ihren Anbieter eine Konsole erreichen können, suchen Sie sie, bevor Sie anfangen.
2. Zuerst den neuen Port öffnen
Mit ufw:
sudo ufw allow 2222/tcp
Mit firewalld, auf RHEL, Rocky, AlmaLinux und Fedora:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
Ein Cloud-Server hat meist auch eine Firewall oder Sicherheitsgruppe im Panel des Anbieters. Öffnen Sie den Port auch dort. Das ist der häufigste Grund für ein Timeout nach dieser Änderung.
SELinux
Auf Systemen der RHEL-Familie mit SELinux im Enforcing-Modus kann sshd einen neuen Port erst nutzen, wenn Sie ihn beschriften. Die Standard-sshd_config dieser Systeme weist ebenfalls darauf hin. Prüfen Sie, dann fügen Sie das Label hinzu:
getenforce
sudo semanage port -a -t ssh_port_t -p tcp 2222
sudo semanage port -l | grep ssh
Wenn getenforce Disabled sagt, überspringen Sie das. In diesem Zustand scheitert semanage mit SELinux policy is not managed or store cannot be accessed, was harmlos ist. Fehlt semanage, steckt es im Paket policycoreutils-python-utils.
3. Den neuen Port neben den alten setzen
Ersetzen Sie den alten Port noch nicht. Legen Sie eine kleine Datei an, die die Hauptkonfiguration unberührt lässt:
printf 'Port 22\nPort 2222\n' | sudo tee /etc/ssh/sshd_config.d/10-port.conf
sudo sshd -t
Gibt sshd -t nichts aus, ist die Syntax gültig. Ältere Systeme ohne diesen Ordner brauchen dieselben zwei Zeilen in /etc/ssh/sshd_config.
4. Anwenden: Das hängt vom System ab
Fragen Sie zuerst, in welchem Fall Sie sind:
systemctl is-active ssh.socket
Es sagt active (Ubuntu 24.04 und 26.04 standardmäßig). Der Socket hält den Port und wird aus Ihrer Konfiguration erzeugt, ein Neustart des Dienstes genügt also nicht:
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
Das ist die übliche Falle. In unserem Test ließ allein sudo systemctl restart ssh die alten Ports lauschen und meldete keinen Fehler.
Es sagt inactive (Debian, Ubuntu 22.04):
sudo systemctl restart ssh
RHEL-Familie, wo der Dienst anders heißt:
sudo systemctl restart sshd
Ubuntu 22.10 bis 23.10 nutzten den Socket anders und werden nicht mehr unterstützt. Prüfen Sie dort systemctl cat ssh.socket, bevor Sie sich auf diese Schritte verlassen.
Prüfen Sie nun, dass beide Ports lauschen:
ss -tln | grep -E ':(22|2222)\b'
5. Aus einem neuen Terminal testen
Lassen Sie die alte Sitzung offen und führen Sie von Ihrem eigenen Rechner aus Folgendes aus:
ssh -p 2222 user@server
Ein Timeout heißt, eine Firewall steht noch im Weg. Connection refused heißt, es lauscht nichts, oder SELinux hat sshd am Binden gehindert. Beheben Sie das jetzt, solange Port 22 noch funktioniert.
6. Port 22 schließen
Erst wenn der Test funktioniert:
echo 'Port 2222' | sudo tee /etc/ssh/sshd_config.d/10-port.conf
sudo sshd -t
Hat die Haupt-/etc/ssh/sshd_config eine nicht auskommentierte Zeile Port 22, kommentieren Sie auch diese aus, sonst lauscht sshd weiter dort. Wenden Sie es wie in Schritt 4 an, bestätigen Sie mit sudo sshd -T | grep -i ^port und entfernen Sie dann die alte Firewall-Regel, je nachdem, was zutrifft:
sudo ufw delete allow 22/tcp
sudo ufw delete allow OpenSSH
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload
Testen Sie noch einmal in einem neuen Terminal und schließen Sie erst dann die alte Sitzung.
Den Client anpassen
Speichern Sie den Port, damit Sie ihn nicht mehr tippen müssen:
Host server
HostName 203.0.113.10
Port 2222
User user
Weitere Einstellungen pro Host finden Sie in diesen Beispielen für die ssh-config-Datei.
Beachten Sie, dass scp für den Port ein großes -P verwendet, anders als ssh. Wenn Sie fail2ban einsetzen, teilen Sie ihm den neuen Port ebenfalls mit. Siehe fail2ban für SSH.
Fragen
Lohnt es sich, den SSH-Port zu ändern?
Es verringert das Rauschen durch Bots, die nur Port 22 probieren. Gegen einen gezielten Angriff hilft es nicht: Anmeldung nur mit Schlüssel und ein aktueller Server zählen mehr.
Warum funktioniert der neue SSH-Port unter Ubuntu 24.04 nicht?
Ubuntu 24.04 startet sshd über ssh.socket. Führen Sie nach der Änderung von Port sudo systemctl daemon-reload und sudo systemctl restart ssh.socket aus und prüfen Sie mit ss -tln.
Wie verbinde ich mich per SSH mit einem anderen Port?
Mit ssh -p 2222 benutzer@server, oder Sie tragen Port 2222 unter dem Host-Eintrag des Servers in ~/.ssh/config ein. scp erwartet den Port mit großem -P.
Quellen
- sshd_config(5), OpenBSD-Handbuch
- Launchpad-Bug 2069041: Änderung von Port erfordert daemon-reload
- SELinux für nicht standardmäßige Konfigurationen einrichten, Red Hat
- ufw(8), Ubuntu-Handbuch