SSH-Portkonflikte: So identifizieren und ändern Sie Ports

Lösen Sie frustrierende SSH-Verbindungsprobleme, die durch Portkonflikte verursacht werden. Diese Anleitung zeigt, wie Sie den aktiven SSH-Port mithilfe von Systembefehlen (ss/netstat) eindeutig identifizieren und bietet eine schrittweise, sichere Methode zum Ändern der Konfigurationsdatei (sshd_config) und zum Aktualisieren von Firewalls, um auf eine neue Portnummer umzustellen und Aussperrungen zu vermeiden.

SSH-Portkonflikte: So identifizieren und ändern Sie Ports

SSH hört normalerweise auf TCP-Port 22, aber echte Server sind nicht immer so ordentlich. Ein Cloud-Image kann SSH auf 2222 verschoben haben. Ein Container-Host kann mehrere SSH-ähnliche Dienste über verschiedene Ports veröffentlichen. Ein Härtungsskript kann vor Monaten sshd_config geändert haben. Oder sshd kann einfach nicht starten, weil ein anderer Prozess bereits an dieselbe Adresse und denselben Port gebunden ist.

Portprobleme zeigen sich normalerweise als Connection refused oder Connection timed out. Der Unterschied ist wichtig: Verweigert bedeutet normalerweise, dass Sie den Host erreicht haben, aber kein Dienst die Verbindung auf diesem Port angenommen hat. Zeitüberschreitung bedeutet normalerweise eine Firewall, Route, Sicherheitsgruppe oder ein Netzwerkpfad, der den Datenverkehr blockiert hat.


SSH-Portkonflikte verstehen

Ein Portkonflikt entsteht, wenn zwei verschiedene Netzwerkdienste versuchen, auf der exakt gleichen TCP- oder UDP-Portnummer auf eingehende Verbindungen zu lauschen. Da jeweils nur ein Prozess an einen bestimmten Port auf einer IP-Adresse binden kann, schlägt der zweite Dienst, der zu starten versucht, normalerweise fehl oder weicht auf einen anderen Port aus, falls entsprechend konfiguriert.

Für SSH bedeutet ein echter Bindekonflikt, dass sshd nicht auf der konfigurierten Adresse und dem konfigurierten Port lauschen kann. Ein häufigeres Problem ist einfacher: SSH lauscht auf einem Port, während der Client oder die Firewall einen anderen verwendet.

Häufige Verbindungsprobleme im Zusammenhang mit Ports

Bei der Fehlersuche von SSH-Konnektivität äußern sich Portprobleme oft wie folgt:

  1. Connection Refused: Dies bedeutet normalerweise, dass der Zielrechner erreichbar ist, aber kein Dienst aktiv auf dem angegebenen Port lauscht (entweder wurde der falsche Port verwendet oder der SSH-Dienst konnte nicht gestartet werden).
  2. Connection Timeout: Dies deutet oft darauf hin, dass der für diesen Port bestimmte Datenverkehr von einer Firewall (entweder hostbasiert oder netzwerkbasiert) blockiert wird oder dass der Host selbst nicht erreichbar ist.

Schritt 1: Identifizieren des aktuell aktiven SSH-Ports

Bevor Sie Änderungen vornehmen, müssen Sie bestätigen, welchen Port der SSH-Daemon tatsächlich verwendet. Dies erfordert Administratorzugriff (normalerweise über die Konsole oder eine bestehende erfolgreiche Verbindung).

A. Überprüfen der SSH-Konfigurationsdatei

Der primäre Ort für die SSH-Konfiguration ist die Datei sshd_config. Die Port-Direktive gibt an, auf welchem Port sshd lauscht.

Speicherort: /etc/ssh/sshd_config (Üblich auf Linux/Unix-Systemen)

Verwenden Sie einen Texteditor wie nano oder vim, um die Datei zu überprüfen:

sudo nano /etc/ssh/sshd_config

Suchen Sie nach der Zeile, die mit Port beginnt. Wenn sie auskommentiert ist, verwendet OpenSSH den Standardport 22, es sei denn, eine andere enthaltene Konfigurationsdatei überschreibt ihn.

#Port 22
Port 2222

Überprüfen Sie auch enthaltene Konfigurationsschnipsel:

grep -R "^[[:space:]]*Port" /etc/ssh/sshd_config /etc/ssh/sshd_config.d 2>/dev/null

B. Überprüfen von lauschenden Sockets mit netstat oder ss

Die autoritativste Methode, um zu bestätigen, an welchen Port der Dienst derzeit gebunden ist, ist die Überprüfung der Netzwerk-Lauschsockets des Betriebssystems. Das moderne Tool ist ss, aber netstat ist immer noch weit verbreitet.

Verwenden des ss-Befehls (Empfohlen auf modernen Systemen):

Dieser Befehl zeigt alle TCP-Listener (-t), einschließlich Prozesse (-p), gefiltert nach dem SSH-Dienst (grep sshd).

sudo ss -tlpn | grep sshd

Beispielausgabe (Standardport):

LISTEN 0      128    0.0.0.0:22               0.0.0.0:*    users:(("sshd",pid=1234,fd=3))

Beispielausgabe (Benutzerdefinierter Port 2222):

LISTEN 0      128    0.0.0.0:2222             0.0.0.0:*    users:(("sshd",pid=1234,fd=3))

Verwenden von netstat (Alternative):

sudo netstat -tulpn | grep sshd

Sobald Sie den Port identifiziert haben (z. B. 2222), müssen Sie diese Portnummer verwenden, wenn Sie von einem entfernten Client aus eine Verbindung herstellen.


Schritt 2: Sichere Änderung des SSH-Ports

Das Ändern des SSH-Ports ist eine gängige Sicherheitshärtungspraxis. Ändern Sie den Port niemals, bevor Sie sichergestellt haben, dass Ihre neue Konfiguration funktioniert, da Sie sich sonst aussperren könnten.

A. Die sichere Reihenfolge zum Ändern von Ports

Befolgen Sie diese Schritte genau, um den Zugriff nicht zu verlieren:

  1. Firewall-Zugriff überprüfen: Stellen Sie sicher, dass der neue Port in Ihrer hostbasierten Firewall (z. B. ufw oder firewalld) geöffnet ist, bevor Sie den SSH-Dienst neu starten.
  2. Konfiguration bearbeiten: Ändern Sie /etc/ssh/sshd_config auf die neue Portnummer.
  3. Konfigurationssyntax testen: Testen Sie die Konfigurationssyntax vor dem Neustart.
  4. SSH-Dienst neu starten: Wenden Sie die Änderungen an.
  5. Remote-Verbindung testen: Versuchen Sie sofort, von einer separaten Terminalsitzung aus eine Verbindung mit dem neuen Port herzustellen.
  6. Alte Portregel entfernen (Optional): Schließen Sie nach der Überprüfung den alten Port (22) in der Firewall.

B. Ändern von /etc/ssh/sshd_config

Verwenden Sie Ihren bevorzugten Editor, um die Konfigurationsdatei zu öffnen:

sudo nano /etc/ssh/sshd_config

Suchen Sie die Port-Zeile. Ändern Sie den vorhandenen Wert oder kommentieren Sie eine neue Port-Direktive aus/fügen Sie sie hinzu. Ändern wir von 22 auf 2222.

# Ändern Sie diese Zeile:
Port 2222

Speichern und schließen Sie die Datei.

C. Aktualisieren von hostbasierten Firewalls (entscheidender Schritt)

Wenn Sie dies überspringen, schlägt Ihre Verbindung nach dem Neustart des Dienstes mit einer Zeitüberschreitung fehl.

Verwenden von UFW (Ubuntu/Debian):

# 1. Erlauben Sie den neuen Port
sudo ufw allow 2222/tcp

# 2. Wenn Sie die alte Portregel später entfernen möchten (nach dem Test):
# sudo ufw delete allow 22/tcp

sudo ufw status verbose

Verwenden von Firewalld (RHEL/CentOS/Fedora):

# 1. Erlauben Sie den neuen Port dauerhaft
sudo firewall-cmd --permanent --add-port=2222/tcp

# 2. Firewall-Regeln neu laden
sudo firewall-cmd --reload

D. Testen und Neuladen des SSH-Daemons

Testen Sie immer die Syntax der Konfigurationsdatei, bevor Sie Änderungen anwenden:

sudo sshd -t

Wenn die Syntax sauber ist, laden Sie den Dienst neu oder starten Sie ihn neu:

sudo systemctl reload sshd
# Wenn Ihr System stattdessen den Dienstnamen ssh verwendet:
# sudo systemctl reload ssh

Überprüfen Sie dann den Status:

sudo systemctl status sshd

Lassen Sie Ihre aktuelle SSH-Sitzung geöffnet und testen Sie den neuen Port von einem separaten Terminal aus, bevor Sie etwas schließen.

E. Verbinden über den neuen Port

Von Ihrem Client-Computer aus müssen Sie jetzt den neuen Port explizit mit dem Flag -p im ssh-Befehl angeben:

ssh benutzername@ihre_server_ip -p 2222

Wenn die Verbindung erfolgreich ist, hat die Portänderung funktioniert. Erst dann sollten Sie die alte Firewall-Regel entfernen.

Warnung: Wenn Sie den Port ändern und es versäumen, ihn in der Firewall zu öffnen, oder wenn sshd nicht neu geladen werden kann, können Sie sich aussperren. Halten Sie einen Konsolen-, Seriell-, Cloud-Wiederherstellungs- oder anderen administrativen Pfad bereit.


Fehlerbehebung bei Verbindungsfehlern nach Portänderung

Wenn Sie nach der Portänderung einen Fehler erhalten, gehen Sie diese kurze Checkliste durch:

Fehlersymptom Wahrscheinliche Ursache(n)
Connection Refused 1. sshd konnte nicht gestartet werden (überprüfen Sie systemctl status sshd). 2. Sie haben den falschen Port im Client-Befehl angegeben. 3. Die Firewall erlaubt Datenverkehr auf dem alten Port (22), blockiert aber den neuen Port (2222).
Connection Timeout 1. Host ist ausgefallen. 2. Die Host-Firewall (UFW/firewalld) verwirft aktiv Pakete für den neuen Port. 3. Die Netzwerkinfrastruktur-Firewall blockiert den Port.

Um zu bestätigen, dass der Daemon lauscht, führen Sie auf der Serverseite erneut sudo ss -tlpn | grep sshd aus.

Ein sichererer Ansatz für Portänderungen

Vertrauen Sie nicht allein der Konfigurationsdatei und vertrauen Sie nicht allein der Firewall. Bestätigen Sie alle drei Ebenen: sshd_config sagt den erwarteten Port, ss zeigt, dass sshd tatsächlich dort lauscht, und die Firewall oder Cloud-Sicherheitsgruppe erlaubt Datenverkehr, um ihn zu erreichen. Wenn diese drei übereinstimmen, ist der Client-Befehl einfach:

ssh -p 2222 benutzername@ihre_server_ip

Das Ändern des SSH-Ports kann laute automatisierte Scans auf Port 22 reduzieren, ist aber kein Ersatz für Schlüsselauthentifizierung, vernünftige Firewall-Regeln, gepatchte Systeme und die Deaktivierung der Passwortanmeldung, wo angemessen.