In meinem letzten Beitrag habe ich die Grundlagen des `ssh`-Befehls und nützliche Optionen erläutert. Doch die manuelle Eingabe komplexer IP-Adressen, Benutzernamen und Portnummern ist jedes Mal aufs Neue lästig. Hier kommt die **SSH‑Config‑Datei** ins Spiel – sie macht all diese Mühen auf einen Schlag überflüssig. Ähnlich wie ein Lesezeichen speichert sie häufig genutzte Serververbindungen und ermöglicht den Zugriff über einen einfachen **Alias**. In meiner Anfangszeit, als mir die Existenz der Config-Datei noch unbekannt war, fügte ich oft die komplette Befehlszeile als Alias in meine `.bashrc` ein. Erst als ich die Config-Datei erstellte, wurde mir bewusst, wie simpel und effizient die Lösung ist. ![Ich staune über die SSH‑Config](/media/whitedec/blog_img/ssh_config_favorite_style.webp) --- ## Was ist die SSH‑Config‑Datei? {#sec-481141e7802b} Die **SSH‑Config‑Datei** ist eine Konfigurationsdatei, die das Verhalten des SSH‑Clients definiert. Wenn Sie Verbindungsinformationen (Benutzername, Port, Schlüsseldatei usw.) für einen bestimmten Host vorab speichern, genügt später die Verwendung eines kurzen Alias. * **Ort:** Normalerweise befindet sich die Datei im `.ssh`‑Verzeichnis Ihres Home‑Verzeichnisses unter dem Namen `config`. Wenn Sie SSH gerade erst installiert haben, existiert sie möglicherweise nicht – dann müssen Sie sie erstellen. * **Datei erstellen:** Falls `~/.ssh/config` nicht existiert, können Sie sie einfach anlegen. **Setzen Sie die Berechtigungen unbedingt auf 600.** ```bash touch ~/.ssh/config chmod 600 ~/.ssh/config # Sicherheit: Berechtigungen sind Pflicht! ``` --- ## Regeln zum Schreiben der Config‑Datei {#sec-a6ba2fff88f5} Die Config‑Datei ist eine einfache Textdatei, in der jede Host‑Konfiguration mit dem Schlüsselwort `Host` beginnt und blockweise strukturiert ist. #### Grundstruktur ``` Host [Alias] [Option1] [Wert1] [Option2] [Wert2] ... ``` * **`Host [Alias]`**: Kennzeichnet den Beginn eines Blocks und definiert den Alias, der später im `ssh`-Befehl verwendet wird. Statt eines Alias können Sie auch die tatsächliche Hostadresse (IP oder Domain) angeben. Wildcards (`*`, `?`) sind ebenfalls möglich. * **Einrückung**: Die Optionen unter `Host` müssen eingerückt werden. Leerzeichen oder Tabs sind erlaubt, aber Konsistenz ist empfehlenswert. * **Optionen**: Unter `Host` listen Sie die SSH‑Optionen auf, die für die Verbindung mit diesem Alias gelten. Diese Optionen entsprechen denen, die Sie zuvor direkt im `ssh`-Befehl mit `-Option` verwendet haben. ### Häufig verwendete Optionen {#sec-488803d47bdf} | | | | | --- | --- | --- | | **Option** | **Beschreibung** | **Beispielwert** | | `HostName` | Die IP‑Adresse oder Domain des Zielservers | `192.168.1.100` oder `example.com` | | `User` | Der Benutzername auf dem Remote‑Server | `ubuntu`, `ec2-user`, `root` | | `Port` | Der SSH‑Port des Remote‑Servers (Standard 22) | `2222` | | `IdentityFile` | Pfad zur privaten Schlüsseldatei | `~/.ssh/id_ed25519_myserver` | | `ForwardAgent` | SSH‑Agent‑Weiterleitung aktivieren | `yes` | | `StrictHostKeyChecking` | Strenge Host‑Key‑Prüfung (`yes` empfohlen) | `no` (nur für erste Tests) | | `PortForwarding` | Port‑Weiterleitung erlauben | `yes` | | `LocalForward` | Lokale Port‑Weiterleitung (`-L`‑Option) | `8080 localhost:80` | | `ServerAliveInterval` | Intervall zur Überprüfung, ob der Server aktiv ist (Sekunden) | `60` | | `ServerAliveCountMax` | Anzahl der fehlgeschlagenen Versuche vor Trennung | `3` | --- ## Beispiel für das Schreiben einer SSH‑Config {#sec-92c9daf3ee29} Fügen wir einige häufig genutzte Server in die Datei `~/.ssh/config` ein. ```ini # Erster Server: Webserver (Alias: webserver) Host webserver HostName 192.168.1.100 User ubuntu Port 2222 IdentityFile ~/.ssh/id_ed25519_webserver # spezieller Schlüssel für den Webserver # Zweiter Server: Entwicklungsserver (Alias: devbox) Host devbox HostName dev.example.com User developer IdentityFile ~/.ssh/id_rsa_dev # RSA‑Schlüssel # Lokale Port‑Weiterleitung: 8000 → Remote 80 LocalForward 8000 localhost:80 # Dritter Server: Alle AWS‑EC2‑Server (Alias: aws-*) Host aws-* User ec2-user IdentityFile ~/.ssh/aws_ec2_key.pem # Regelmäßige Signale, um die Verbindung aktiv zu halten ServerAliveInterval 60 ServerAliveCountMax 3 # Allgemeine Einstellungen für ein bestimmtes IP‑Subnetz (Alias: 10.0.0.*) Host 10.0.0.* User admin Port 22 ``` **Erklärung:** * `webserver`: Verbinden Sie sich mit `192.168.1.100` als `ubuntu` über Port `2222` und den Schlüssel `id_ed25519_webserver`. * `devbox`: Verbinden Sie sich mit `dev.example.com` als `developer` über den Schlüssel `id_rsa_dev` und leiten Sie lokal Port `8000` an Remote Port `80` weiter. * `aws-*`: Für alle Aliase, die mit `aws-` beginnen, gelten die gleichen Einstellungen. Wenn Sie z. B. `ssh aws-prod` ausführen, werden automatisch `ec2-user` als Benutzer und der entsprechende Schlüssel verwendet. * `10.0.0.*`: Für jede IP im Subnetz `10.0.0.x` wird `admin` als Benutzer und Port `22` verwendet. > In der Praxis nutze ich selten Wildcards wie `*`. Stattdessen erstelle ich für jeden Server einen eigenen Eintrag – das sorgt für eine übersichtliche Verwaltung. Wenn ich denselben Server mit unterschiedlichen Einstellungen erreichen muss, füge ich einfach einen weiteren Alias hinzu, ähnlich wie man in einem Restaurant verschiedene Gerichte auswählen kann. --- ![Der Moment, wenn Sie auf den SSH‑Button klicken und die Magie des Netzwerks entfaltet](/media/whitedec/blog_img/ssh_config_network_magic.webp) ## Verwendung der Config‑Datei {#sec-e176d1ccdfce} Sobald Sie die Konfiguration gespeichert haben, wird die Verbindung deutlich einfacher. Probieren wir es anhand des obigen Beispiels aus. ### 1. Verbindung über einen Alias herstellen {#sec-b0810f8f4908} Führen Sie einfach den Alias im `ssh`-Befehl aus. * **Alias `webserver` verwenden:** ```bash ssh webserver Enter passphrase for key '/home/youruser/.ssh/id_ed25519_webserver': ubuntu@webserver-ip:~ $ ``` > Dieser Befehl ist intern gleichbedeutend mit `ssh -p 2222 -i ~/.ssh/id_ed25519_webserver ubuntu@192.168.1.100`. * **Alias `devbox` verwenden:** ```bash ssh devbox Enter passphrase for key '/home/youruser/.ssh/id_rsa_dev': developer@devbox-domain:~ $ ``` > (Wenn Sie gleichzeitig Port 8000 lokal öffnen, wird der Traffic an Remote Port 80 weitergeleitet.) --- ## Vorteile der Config‑Datei {#sec-2c234f7e8725} * **Bequemlichkeit:** Lange, komplexe Befehle werden durch kurze Aliase ersetzt, was Tippfehler reduziert und Zeit spart. * **Produktivität:** Häufig genutzte Server können schnell gewechselt werden, was die Arbeitsgeschwindigkeit erhöht. * **Einfaches Management:** Alle Verbindungsdetails sind an einem Ort. Wenn sich z. B. die IP eines Servers ändert, reicht ein Update in der Config‑Datei. * **Sicherheit:** Wichtige Informationen wie Schlüsselpfade erscheinen nicht in der Befehls‑Historie. --- ## Fazit {#sec-9c659c3d712e} Die SSH‑Config‑Datei ist ein unverzichtbares Werkzeug für jeden Entwickler und Systemadministrator, der SSH nutzt. Nutzen Sie sie, um Ihre SSH‑Nutzung zu vereinfachen und effizienter zu gestalten. Öffnen Sie `~/.ssh/config`, erstellen Sie Ihre eigenen Aliase und genießen Sie die Vorteile! Weitere Artikel zum Thema SSH finden Sie ebenfalls – suchen Sie im rechten Suchfeld nach `ssh`. Bei Fragen stehen wir Ihnen gerne in den Kommentaren zur Verfügung!