Übersicht
SSH (Secure Shell) ist ein unverzichtbares Standard-Netzwerkprotokoll für die Remote-Verwaltung von Linux-Servern. In diesem Artikel erfahren Sie Schritt für Schritt, wie Sie unter Ubuntu einen OpenSSH-Server einrichten, eine passwortlose Authentifizierung mittels öffentlicher Schlüssel konfigurieren, SSH-Portweiterleitungen für praktische Netzwerkverbindungen nutzen und essenzielle Tipps zur Härtung der Serversicherheit umsetzen.
1. OpenSSH-Server installieren und Dienst aktivieren
Um Remoteverbindungsdienste auf einem Ubuntu-System bereitzustellen, aktualisieren wir zunächst die Paketlisten und installieren das Paket openssh-server.

Führen Sie den Befehl systemctl enable --now ssh aus, um den installierten SSH-Dienst so zu aktivieren, dass er beim Systemstart automatisch startet und sofort ausgeführt wird.

Überprüfen Sie, ob der SSH-Dienst-Daemon (sshd) ordnungsgemäß läuft und sich im Zustand active (running) befindet.

Führen Sie den Befehl ss -tulpn | grep :22 aus, um zu überprüfen, ob auf dem SSH-Standardport 22 auf eingehende Netzwerkverbindungen gewartet wird (LISTEN).

2. SSH-Schlüsselpaar für den passwortlosen Zugriff generieren und registrieren
Erstellen Sie das Verzeichnis ~/.ssh zur sicheren Aufbewahrung von SSH-Schlüsseldateien und setzen Sie die Berechtigungen auf 700, sodass nur der Eigentümer Zugriff hat.

Führen Sie den Befehl test -f ~/.ssh/id_ed25519 || ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_ed25519 aus, um ein neues Schlüsselpaar auf Basis des hochsicheren und performanten Ed25519-Algorithmus zu erzeugen, falls noch keines vorhanden ist.
Die Befehlsausgabe bestätigt, dass der private Schlüssel (id_ed25519) und der öffentliche Schlüssel (id_ed25519.pub) erfolgreich erstellt wurden.

Fügen Sie den Inhalt des generierten öffentlichen Schlüssels zur Autorisierungsdatei ~/.ssh/authorized_keys hinzu.

Um die Sicherheit der Schlüsseldatei zu gewährleisten und die strengen Berechtigungsprüfungen des SSH-Daemons zu bestehen, beschränken Sie die Berechtigungen der Datei authorized_keys auf 600.

Geben Sie den erstellten privaten Ed25519-Schlüssel an, um eine Verbindung zur lokalen Loopback-Adresse (127.0.0.1) herzustellen, und überprüfen Sie, ob die schlüsselbasierte Authentifizierung ordnungsgemäß funktioniert.
Die Befehlsausgabe zeigt eine Erfolgsmeldung für die lokale schlüsselbasierte Authentifizierung ohne Passworteingabe an.

3. Praktisches Netzwerk-Tunneling: SSH-Portweiterleitung
Um einen Webserver zu betreiben und HTTP-Anfragen zu testen, aktualisieren wir die Paketlisten und installieren die Pakete curl und python3.

Führen Sie den Befehl mkdir -p /tmp/webroot && echo '<h1>SSH Tunnel Test OK</h1>' > /tmp/webroot/index.html aus, um ein Webdokument-Verzeichnis für den Portweiterleitungstest zu erstellen und eine Test-HTML-Datei anzulegen.

Führen Sie den Befehl python3 -m http.server 8080 --directory /tmp/webroot >/dev/null 2>&1 & aus, um einen einfachen Webserver auf Port 8080 im Hintergrund auszuführen, der als interner Dienst fungiert.

Führen Sie die lokale Portweiterleitung im Hintergrund aus, um Anfragen, die am lokalen Port 9090 eingehen, über den sicheren SSH-Tunnel an Port 8080 des Zielservers weiterzuleiten.
Nach Ausführung des Befehls wird der Portweiterleitungstunnel sicher im Hintergrund aufgebaut, ohne die Terminalsitzung zu blockieren.

Senden Sie eine HTTP-Anfrage an den über den SSH-Tunnel weitergeleiteten lokalen Port 9090, um zu prüfen, ob die Verbindung zum internen Webserver ordnungsgemäß vermittelt wird.
Als Ergebnis des Befehls wird die Antwort des internen Webservers auf Port 8080 (<h1>SSH Tunnel Test OK</h1>) ausgegeben, was bestätigt, dass die Portweiterleitung einwandfrei funktioniert.

Nach Abschluss des Portweiterleitungstests führen Sie den Befehl pkill -f 'http.server 8080' aus, um den im Hintergrund laufenden Test-Webserver-Prozess sicher zu beenden.

4. SSH-Server-Sicherheitskonfiguration in der Praxis (sshd_config)
Um sich gegen unvorhergesehene Zwischenfälle bei Konfigurationsänderungen abzusichern und die Originaleinstellungen zu bewahren, sichern Sie die Konfigurationsdatei mit dem Befehl sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.

Zur Erhöhung der Sicherheit ändern Sie den Konfigurationswert mit dem Befehl sudo sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config, um direkte Remote-Anmeldungen mit dem Root-Konto vollständig zu blockieren.

Führen Sie den Befehl sudo sshd -t aus, um die geänderte SSH-Server-Konfigurationsdatei vorab sicher auf Syntaxfehler oder Tippfehler zu überprüfen.
Nach Ausführung des Befehls wird keine Fehlermeldung ausgegeben, was bestätigt, dass die Konfigurationssyntax fehlerfrei ist.

Führen Sie den Befehl grep -E '^(PermitRootLogin|PasswordAuthentication)' /etc/ssh/sshd_config || echo '설정 검증 완료' aus, um zu überprüfen, ob die Option zur Sperrung des Root-Logins (PermitRootLogin no) korrekt in der Konfigurationsdatei übernommen wurde.
Das Ergebnis des Befehls zeigt PermitRootLogin no an und bestätigt somit, dass die Sicherheitseinstellung erfolgreich angewendet wurde.

In diesem Leitfaden haben wir die wesentlichen Schritte für die Praxis unter Ubuntu zusammengefasst – von grundlegenden SSH-Verbindungen über Portweiterleitung bis hin zu unverzichtbaren Sicherheitseinstellungen.
Wenden Sie diese Sicherheitsregeln Schritt für Schritt an, um eine noch sicherere und effizientere Umgebung für Ihre Serververwaltung aufzubauen.