Vollständiger Ubuntu SSH Praxis-Leitfaden

Übersicht

Dieser Leitfaden behandelt die grundlegenden Konzepte und wichtigsten Anwendungsbereiche von SSH (Secure Shell), einem unverzichtbaren Werkzeug für die Linux-Serververwaltung und Remote-Arbeit. Von der Installation des Client-Pakets über die grundlegende Remoteverbindung, die sichere Erstellung von SSH-Schlüsselpaaren und die Konfiguration der passwortlosen Authentifizierung bis hin zu praktischen SSH-Config-Profilen und Portweiterleitungstechniken führt Sie dieser Beitrag Schritt für Schritt mit anschaulichen Terminal-Praxisbefehlen durch den Prozess.

1. Überprüfung des SSH-Clients und grundlegende Remoteverbindung

Für die Durchführung der SSH-Remoteverbindungspraxis installieren wir das Paket openssh-client und aktualisieren es auf den neuesten Stand.

apt-get update -qq && apt-get install -y openssh-client

Der Befehl ssh -V prüft die Versionsinformationen des auf dem System installierten OpenSSH-Clients.
⚙️ [Wichtige Optionen]

-p : Gibt anstelle des Standardports 22 eine bestimmte Portnummer an, die der Remoteserver verwendet.
-i : Gibt den Dateipfad zum privaten Schlüssel (Private Key) an, der anstelle eines Passworts für die Authentifizierung verwendet werden soll.
-v : Gibt Debug-Meldungen aus, um den Verbindungsprozess und Ursachen von Problemen detailliert zu analysieren.
-C : Aktiviert die Komprimierung bei der Datenübertragung, um Netzwerkbandbreite zu sparen.
-o : Gibt Optionen, die normalerweise in der Konfigurationsdatei (~/.ssh/config) definiert werden (z. B. ConnectTimeout), direkt in der Befehlszeile an.
-L : Richtet eine lokale Portweiterleitung ein, um Datenverkehr an einen entfernten Netzwerkdienst weiterzuleiten.
-R : Richtet eine Remote-Portweiterleitung ein, um den Zugriff vom Remoteserver auf lokale Dienste zu ermöglichen.

ssh -V

Der Befehl ssh -p 22 -o ConnectTimeout=5 [email protected] versucht eine Verbindung zum angegebenen Remote-Host mit Port 22 und einem Verbindungs-Timeout von 5 Sekunden herzustellen.
Dadurch wird endloses Warten bei Verbindungsverzögerungen verhindert und der Verbindungsstatus kann schnell überprüft werden.

ssh -p 22 -o ConnectTimeout=5 testuser@127.0.0.1 || true

2. Erstellung von SSH-Schlüsselpaaren (Key Pair) und sichere Berechtigungskonfiguration

Bereiten Sie ein Verzeichnis vor, um die SSH-Schlüsseldateien sicher aufzubewahren, und beschränken Sie die Zugriffsrechte mit dem Befehl mkdir -p ~/.ssh && chmod 700 ~/.ssh so, dass nur der Eigentümer Zugriff hat.

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

Der Befehl ssh-keygen -t ed25519 -C 'lab-demo@ubuntu' -f ~/.ssh/id_ed25519 -N '' generiert ein neues SSH-Schlüsselpaar unter Verwendung des modernen Verschlüsselungsstandards Ed25519 ohne Passphrase.
Anhand der Befehlsausgabe können Sie überprüfen, ob der private Schlüssel (id_ed25519), der öffentliche Schlüssel (id_ed25519.pub) und der eindeutige Schlüssel-Fingerprint erfolgreich erstellt wurden.

ssh-keygen -t ed25519 -C ’lab-demo@ubuntu’ -f ~/.ssh/id_ed25519 -N ‘’

Um die strengen Sicherheitsanforderungen des SSH-Daemons zu erfüllen, legen Sie die Dateiberechtigungen mit dem Befehl chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub so fest, dass der private Schlüssel nur vom Eigentümer gelesen und geschrieben werden kann, während der öffentliche Schlüssel für jeden lesbar ist.

chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub

Der Befehl ls -la ~/.ssh listet die im Verzeichnis erstellten Dateien und deren konfigurierte Sicherheitsberechtigungen detailliert auf.
Anhand der Ausgabe lässt sich verifizieren, dass das Verzeichnis .ssh mit drwx------ (700), der private Schlüssel mit -rw------- (600) und der öffentliche Schlüssel mit -rw-r--r-- (644) die beabsichtigten Berechtigungen korrekt erhalten haben.

ls -la ~/.ssh

3. Registrierung des öffentlichen Schlüssels für passwortlose Anmeldung (ssh-copy-id)

Erstellen Sie die Datei zum Speichern von öffentlichen Schlüsseln für Remoteverbindungen und setzen Sie die Zugriffsberechtigungen mit dem Befehl touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys so, dass nur der Eigentümer Lese- und Schreibrechte besitzt.

touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys

Führen Sie den Befehl cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys aus, um den Inhalt des erstellten öffentlichen Schlüssels zur Liste der autorisierten Schlüssel hinzuzufügen.

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

Der Befehl ssh-keygen -l -f ~/.ssh/authorized_keys ruft die Fingerprint-Informationen der registrierten Authentifizierungsschlüsseldatei ab, um zu überprüfen, ob der öffentliche Schlüssel ordnungsgemäß hinterlegt wurde.
Die Ausgabe bestätigt, dass der 256-Bit Ed25519 öffentliche Schlüssel sowie der bei der Erstellung angegebene Kommentar (lab-demo@ubuntu) korrekt registriert sind.

ssh-keygen -l -f ~/.ssh/authorized_keys

4. Vereinfachung komplexer Verbindungsbefehle mit der SSH-Konfigurationsdatei

Definieren Sie die IP-Adresse des Remote-Hosts, den Benutzernamen, die Portnummer und den Pfad zum Authentifizierungsschlüssel in der Datei ~/.ssh/config, um sich bequem über einen Alias anstelle langer Verbindungsinformationen zu verbinden.

cat « ‘EOF’ > ~/.ssh/config
Host dev-server
HostName 127.0.0.1
User testuser
Port 22
IdentityFile ~/.ssh/id_ed25519
EOF

Um zu verhindern, dass der SSH-Client eine aus Sicherheitsgründen unsichere Konfigurationsdatei ablehnt, setzen Sie die Dateiberechtigungen mit dem Befehl chmod 600 ~/.ssh/config so, dass nur der Eigentümer Lese- und Schreibrechte besitzt.

chmod 600 ~/.ssh/config

Der Befehl cat ~/.ssh/config gibt den Inhalt der erstellten SSH-Client-Konfigurationsdatei aus, um die Einstellungen zu überprüfen.
Anhand der Ausgabe lässt sich bestätigen, dass Hostname, Benutzerkonto, Port und die privaten Schlüsselinformationen für den Alias dev-server wie vorgesehen gespeichert wurden.

cat ~/.ssh/config

5. Ausführen von SSH-Einmalbefehlen und Tunneling zur Steigerung der Produktivität bei der Remote-Arbeit

Der Befehl ssh -V prüft die Versionsinformationen des aktuell auf dem System installierten OpenSSH-Clients.

ssh -V

Der Befehl ssh -o BatchMode=yes -o ConnectTimeout=2 [email protected] 'uname -a; df -h' || true führt Befehle zur Abfrage von Systeminformationen und zur Überprüfung der Festplattenbelegung direkt auf dem Remote-Host aus und gibt die Ergebnisse zurück, ohne eine interaktive Remote-Shell zu öffnen.
Da keine Passworteingabe erwartet wird und die Ausführung sofort erfolgt, können Einmalbefehle in Automatisierungsskripten oder Batch-Jobs sicher ausgeführt werden.

ssh -o BatchMode=yes -o ConnectTimeout=2 testuser@127.0.0.1 ‘uname -a; df -h’ || true

Der Befehl ssh -f -N -L 8080:localhost:80 -o ConnectTimeout=2 [email protected] || true führt ein lokales Port-Forwarding durch, indem im Hintergrund ein sicherer, verschlüsselter Tunnel ohne Ausführung von Remote-Befehlen aufgebaut wird, der den lokalen Port 8080 mit Port 80 des Remoteservers verbindet.
Dadurch lässt sich über den lokalen Port sicher auf interne Webdienste oder Datenbanken auf der Remote-Seite zugreifen, die von außen nicht direkt erreichbar sind.

ssh -f -N -L 8080:localhost:80 -o ConnectTimeout=2 testuser@127.0.0.1 || true

In diesem Leitfaden haben wir Schritt für Schritt die Grundlagen der SSH-Remoteverbindung unter Ubuntu, die Erhöhung der Sicherheit durch schlüsselbasierte passwortlose Anmeldung und nützliche Portweiterleitungs-Techniken kennengelernt.
Nutzen Sie die durch die praktische Übung erworbenen SSH-Kenntnisse, um Ihre Remote-Serververwaltungsumgebung künftig noch sicherer und komfortabler zu gestalten.