Der ultimative Ubuntu SSH-Praxisleitfaden – Von der Verbindung über Portweiterleitung bis zur Sicherheitskonfiguration in einem Durchgang

Ü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.

sudo apt-get update -qq && sudo apt-get install -y 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.

sudo systemctl enable –now ssh

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

sudo systemctl status ssh –no-pager

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).

ss -tulpn | grep :22

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.

mkdir -p ~/.ssh && chmod 700 ~/.ssh

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.

test -f ~/.ssh/id_ed25519 || ssh-keygen -t ed25519 -N ’’ -f ~/.ssh/id_ed25519

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

cat ~/.ssh/id_ed25519.pub » ~/.ssh/authorized_keys

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.

chmod 600 ~/.ssh/authorized_keys

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.

ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no $(whoami)@127.0.0.1 ’echo SSH 로컬 키 인증 접속 성공!’

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.

sudo apt-get update -qq && sudo apt-get install -y curl 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.

mkdir -p /tmp/webroot && echo ‘SSH Tunnel Test OK’ > /tmp/webroot/index.html

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.

python3 -m http.server 8080 –directory /tmp/webroot >/dev/null 2>&1 &

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.

ssh -f -N -L 9090:localhost:8080 -o StrictHostKeyChecking=no $(whoami)@127.0.0.1

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.

curl -s http://localhost:9090

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.

pkill -f ‘http.server 8080’

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.

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.

sudo sed -i ’s/^#PermitRootLogin./PermitRootLogin no/’ /etc/ssh/sshd_config

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.

sudo sshd -t

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.

grep -E ‘^(PermitRootLogin|PasswordAuthentication)’ /etc/ssh/sshd_config || echo ‘설정 검증 완료’

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.