Die SSH-Konfigurationsdatei speichert Verbindungseinstellungen für Remote-Server. Statt lange Befehle mit Benutzernamen, Hostnamen und Ports einzutippen, verbindest du dich mit einem kurzen Alias.

Speicherort und Einrichtung

Die Konfigurationsdatei liegt unter ~/.ssh/config. Falls das Verzeichnis ~/.ssh noch nicht existiert, erstelle es:

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

Erstelle dann die Konfigurationsdatei:

touch ~/.ssh/config
chmod 600 ~/.ssh/config

Die Berechtigungen sind wichtig: Die Datei darf nur für den Besitzer lesbar und schreibbar sein. SSH verweigert sonst die Nutzung.

Grundstruktur

Die Datei besteht aus Host-Blöcken. Jeder Block beginnt mit Host und enthält die Verbindungsoptionen:

Host server1
    HostName 192.168.1.10
    User admin
    Port 22

Host server2
    HostName example.com
    User deploy
    Port 2222

Host *
    Compression yes

Die Einrückung ist optional, macht die Datei aber übersichtlicher.

Praktisches Beispiel

Ohne Konfigurationsdatei sieht eine Verbindung so aus:

ssh john@dev.example.com -p 2322

Mit diesem Eintrag in ~/.ssh/config:

Host dev
    HostName dev.example.com
    User john
    Port 2322

Reicht künftig:

ssh dev

Der SSH-Client liest die Konfiguration und setzt alle Optionen automatisch.

Wichtige Optionen

OptionBeschreibung
HostNameIP-Adresse oder Domain des Servers
UserBenutzername für die Verbindung
PortSSH-Port (Standard: 22)
IdentityFilePfad zum privaten SSH-Schlüssel
CompressionAktiviert Komprimierung (yes/no)
LogLevelDetailgrad der Protokollierung

Muster und Wildcards

Die Host-Direktive unterstützt Muster:

  • * passt auf beliebig viele Zeichen. Host * gilt für alle Verbindungen.
  • ? passt auf genau ein Zeichen. Host server? passt auf server1, server2, usw.
  • ! negiert ein Muster. Host * !production gilt für alle Hosts außer production.

Reihenfolge der Optionen

SSH verarbeitet die Blöcke von oben nach unten. Bei mehreren Treffern gewinnt der erste Wert. Platziere daher spezifische Einträge oben und allgemeine Einstellungen unten:

Host production
    HostName prod.example.com
    User deploy
    IdentityFile ~/.ssh/prod_key

Host staging
    HostName staging.example.com
    User deploy

Host *
    User root
    Compression yes
    ServerAliveInterval 60

Bei ssh production wird User deploy verwendet, nicht User root aus dem *-Block.

Optionen überschreiben

Kommandozeilenoptionen haben Vorrang vor der Konfigurationsdatei. Um dich als anderer Benutzer zu verbinden:

ssh -o "User=root" dev

Um die Konfigurationsdatei komplett zu ignorieren:

ssh -F /dev/null user@example.com

Mit -F gibst du eine alternative Konfigurationsdatei an:

ssh -F ~/.ssh/config_backup dev

Rangfolge der Konfiguration

SSH liest Einstellungen in dieser Reihenfolge:

  1. Kommandozeilenoptionen
  2. Benutzerkonfiguration (~/.ssh/config)
  3. Systemweite Konfiguration (/etc/ssh/ssh_config)

Der erste gefundene Wert gilt.

Nutzung mit anderen Programmen

Die SSH-Konfigurationsdatei wird auch von scp, sftp und rsync gelesen. Ein definierter Host funktioniert mit allen:

scp datei.txt dev:/home/john/
sftp dev
rsync -avz ./projekt/ dev:/var/www/

Zusammenfassung

Die SSH-Konfigurationsdatei unter ~/.ssh/config speichert Verbindungseinstellungen für Remote-Server. Du definierst Host-Aliase mit allen nötigen Optionen und verbindest dich mit einem kurzen Befehl. Wildcards ermöglichen Standardeinstellungen für mehrere oder alle Hosts. Die vollständige Liste aller Optionen findest du in der Manpage:

man ssh_config