So importieren Sie Ihre SSH-Config in einen SSH-Config-Manager

Listen Sie die echten Hosts aus ~/.ssh/config und jeder Datei auf, die Include nennt, und führen Sie für jeden ssh -G name aus, um Adresse, Port, Benutzer, Schlüssel und Jump-Host zu sehen, die ssh wirklich nutzt. Genau diese aufgelöste Sicht soll ein Import wiedergeben. Sichern Sie vorher die Datei, die Schlüssel und known_hosts, und nutzen Sie eine CSV-Datei, wenn die Server in einer Tabelle stehen.

Haben Sie schon eine funktionierende Config? Wardterm liest sie unverändert ein und macht aus jedem Host einen gespeicherten Server. Zeigen

Aktualisiert am . Ausgeführt unter macOS 27 mit OpenSSH 10.3 an einer Test-Config mit Include, ProxyJump, LocalForward und Host *: Die Host-Liste mit awk, ssh -G für jeden Host und die CSV-Schleife wurden ausgeführt, die Ausgabe ist mit Beispieladressen gezeigt.

Was in einer Config-Datei steht

Bevor Sie eine Config umziehen, sollten Sie wissen, was jeder Teil bedeutet, denn nur ein Teil beschreibt Server:

Include config.d/*

Host web
  HostName 203.0.113.10
  User deploy
  Port 2222
  IdentityFile ~/.ssh/id_ed25519_work
  ProxyJump bastion
  LocalForward 5433 localhost:5432

Host *
  ServerAliveInterval 60
  • Host web ist ein Server: ein Name, den Sie tippen, mit Adresse und Einstellungen.
  • Host * und andere Muster wie *.example.com sind keine Server. Sie ergänzen Standardwerte für jeden passenden Host.
  • Include lädt weitere Dateien, hier ~/.ssh/config.d/*, als stünden sie an dieser Stelle.
  • ProxyJump und die Forward-Zeilen verbinden Server untereinander und mit Tunneln.

Für jede Option behält ssh den ersten Wert, den es liest, aus allen passenden Blöcken. Der Leitfaden zur SSH-Config-Datei erklärt diese Regel mit Beispielen.

Jeden Host auflisten, auch aus Include-Dateien

Ein schnelles grep Host übersieht eingebundene Dateien und mischt Server mit Mustern. Dies listet nur echte Namen auf, aus der Hauptdatei und den eingebundenen Dateien:

awk 'tolower($1)=="host" { for (i = 2; i <= NF; i++) if ($i !~ /[*?!]/) print $i }' ~/.ssh/config ~/.ssh/config.d/*
web
bastion

Passen Sie den zweiten Pfad an Ihre eigenen Include-Zeilen an oder lassen Sie ihn weg, wenn Sie keine haben. Ein Name, der zweimal erscheint, ist an zwei Stellen definiert, und für jede Option gewinnen nur die Werte des ersten Blocks.

Jeden Host mit ssh -G prüfen

ssh -G gibt die endgültigen Einstellungen eines Hosts aus, mit allen Dateien und Mustern, und verbindet sich nicht. Das ist die Wahrheit, die ein Import treffen muss:

ssh -G web | grep -E '^(hostname|user|port|identityfile|proxyjump|localforward|remoteforward|dynamicforward) '
user deploy
hostname 203.0.113.10
port 2222
localforward 5433 [localhost]:5432
identityfile ~/.ssh/id_ed25519_work
proxyjump bastion

Achten Sie auf Überraschungen: einen user aus Host *, einen Schlüsselpfad, den es nicht gibt, oder einen Jump-Host, der nicht in Ihrer Liste steht. So prüfen Sie, ob jede Schlüsseldatei wirklich da ist:

ls -l ~/.ssh/id_ed25519_work ~/.ssh/id_ed25519_work.pub

Jump-Hosts haben einen eigenen Leitfaden, Beispiele für ProxyJump und Jump-Hosts, und Weiterleitungen werden in SSH-Tunnel: lokal, remote und dynamisch erklärt.

Sichern, dann bei Bedarf als CSV exportieren

Bewahren Sie eine Kopie von allem auf, was ein Import liest, damit Sie später vergleichen und notfalls zurück können:

mkdir -p ~/ssh-backup
cp -p ~/.ssh/config ~/.ssh/known_hosts ~/ssh-backup/
cp -rp ~/.ssh/config.d ~/ssh-backup/

Manche Werkzeuge und manche Teams arbeiten mit einer Tabelle. Diese Schleife macht aus jedem Host eine CSV-Zeile mit den Werten, die ssh wirklich nutzt, in einem verbreiteten Schema, bei dem die Spalten für Gruppen, Tags und Passwörter leer bleiben:

{
  echo 'Groups,Label,Tags,Hostname/IP,Protocol,Port,Username,Password'
  for h in $(awk 'tolower($1)=="host" { for (i = 2; i <= NF; i++) if ($i !~ /[*?!]/) print $i }' ~/.ssh/config ~/.ssh/config.d/*); do
    ssh -G "$h" | awk -v h="$h" '$1=="hostname"{n=$2} $1=="port"{p=$2} $1=="user"{u=$2} END{print ","h",,"n",ssh,"p","u","}'
  done
} > hosts.csv
Groups,Label,Tags,Hostname/IP,Protocol,Port,Username,Password
,web,,203.0.113.10,ssh,2222,deploy,
,bastion,,198.51.100.5,ssh,22,admin,

Passen Sie die Pfade in der Schleife an wie bei der Host-Liste. Tragen Sie vor dem Import in einer Tabelle Gruppen wie Acme und Tags wie prod ein. Haben Sie Passwörter in die Datei geschrieben, löschen Sie sie danach.

known_hosts mitnehmen

Ihre known_hosts enthält die Fingerabdrücke, die Sie schon akzeptiert haben. Wenn Sie sie importieren, fragt die erste Verbindung aus dem neuen Werkzeug nicht erneut, ob Sie jedem Server vertrauen. So prüfen Sie, ob ein Host darin steht:

ssh-keygen -F 203.0.113.10
ssh-keygen -F '[203.0.113.10]:2222'

Ein Host auf einem anderen Port als 22 wird in eckigen Klammern mit Port gespeichert, wie in der zweiten Zeile. Ist HashKnownHosts aktiv, sind die Namen gehasht, und nur eine solche Suche findet sie. Mehr unter known_hosts erklärt.

Nach dem Import

  • Vergleichen Sie einige Server mit der Ausgabe von ssh -G: Adresse, Port, Benutzer, Schlüssel und Jump-Host.
  • Verbinden Sie sich mit einem Server jeder Art: einem direkten, einem hinter einem Jump-Host und einem mit Tunnel.
  • Behalten Sie die Originaldatei für scp, rsync und git, die sie weiter lesen. Der Import kopiert die Einstellungen und ändert ~/.ssh/config nicht.
  • Ordnen Sie das Ergebnis in Gruppen und Tags, wie in wie Sie viele SSH-Server verwalten.

Die Schritte in der App stehen in der Dokumentation zum Import von Hosts.

Fragen

Was ist ein SSH-Config-Manager?

Eine App, die dasselbe speichert wie ~/.ssh/config, also Adressen, Benutzer, Ports, Schlüssel, Jump-Hosts und Tunnel, aber als gespeicherte Server, die Sie in einem Formular bearbeiten und in Gruppen ordnen, statt als Blöcke in einer Textdatei.

Werden Include-Dateien mit ~/.ssh/config importiert?

Das sollten sie, denn ssh liest sie als Teil der Datei. Prüfen Sie vor dem Import, ob ssh -G die Einstellungen aus den eingebundenen Dateien zeigt, damit Sie wissen, was Sie erwartet.

Gelten die Werte aus Host * für importierte Server?

In ssh gelten alle passenden Blöcke, und der erste Wert gewinnt, also erhält ein Server die Werte aus Host *, die er nicht selbst setzt. ssh -G zeigt dieses Endergebnis für jeden Host.

Kann ich SSH-Hosts aus einer CSV-Datei importieren?

Ja, wenn der Manager CSV liest. Ein verbreitetes Schema ist Groups, Label, Tags, Hostname/IP, Protocol, Port, Username und Password, ein Server pro Zeile.

Quellen

Mehr zu Konfiguration und viele Server

Alle Anleitungen