Ich nutze schon seit vielen Jahren sehr gerne einen SSH Client über die Kommandozeile. Sehr praktisch ist hier, dass man diesen über eine .ssh/config Datei noch komfortabler gestalten kann. In dieser Datei trage ich gerne Tunnel-Konfigurationen, Schlüsselzuordnungen, Benutzernamen, Ports, Proxy-Kommandos und andere Dinge ein. Was genau alles konfiguriert werden kann lässt sich über die Manpage schnell einsehen.
man ssh_config
Da ich in der SSH-Config Datei sämtliche Systeme (Kundensysteme wie eigene) verwalte ist diese über die Jahre doch relativ schnell angewachsen und etwas unübersichtlich geworden. Leider gibt es kein “Include” Anweisung die unterstützt wäre. Es tummelten sich in der Datei schnell alte Server die ich nicht mehr benötigte. Daher habe ich nach einer einfachen Lösung zur Verwaltung der Datei gesucht. Das super einfache Setup will ich jetzt hier schnell vorstellen.
Die Grundidee ist, dass ich die Konfiguration in einzelne Dateien zerteile. Die Dateien haben dann immer den Namen des Kunden für dessen System ich Einträge anlege. Die Dateien lege ich dann in ein Unterverzeichnis ~/.ssh/conf.d.
Beispiel:
.ssh
├── conf.d
│ ├── __default.conf
│ ├── customer1.conf
│ ├── customer2.conf
│ ├── customer3.conf
│ └── private.conf
├── config
├── id_rsa
└── id_rsa.pub
Bei mir sind das insgesamt 44 Dateien. Also schon eine ganze Menge. Jetzt muss nur noch die Datei ~/.ssh/config erzeugt werden.
Zur Generierung der Datei habe ich ein kleines Script geschrieben:
#!/bin/sh
rm ~/.ssh/config
# cat with an empty line after each file
awk 'FNR==1{print ""}{print}' conf.d/\*.conf > ~/.ssh/config
Am Ende erhaltet ihr eine schöne sortierte SSH Konfigurationsdatei.