Als Programmierer hat man mit einer Vielzahl von SSH-Hosts zu tun, mit denen man sich verbinden muss, um dort seinen Aufgaben nachzugehen. Mit einem kleinen Hilfsmittel müsst ihr euch in Zukunft keine komplizierten Host-Namen mehr merken.
Vorbereitung
Dreh- und Angelpunkt dafür ist das ~/.ssh
-Verzeichnis. Dieses Verzeichnis wird von vielen Programmen auf eurem Rechner als Quelle für SSH-Informationen verwendet. U.a. sind diese Programme:
- Terminal-Programme (um Shells auf externen Rechnern zu öffnen)
- SFTP-Clients (um Dateien auf externe Rechner zu kopieren)
- IDEs (um direkt auf externen Rechnern zu arbeiten)
Da alle regulär in diesem Verzeichnis liegenden Dateien einfache Textdateien sind, dienen sie gleichzeitig auch als Dokumentation für euch selber.
Unter Mac OSX bzw. Linux existiert dieses Verzeichnis in der Regel bereits. Auch unter Windows solltet ihr dieses Verzeichnis in eurem Benutzer-Ordner anlegen, was aber nur über die Eingabeaufforderung mit folgender Zeile funktioniert.
cd %USERPROFILE%
mkdir .ssh
In diesem Verzeichnis legt ihr unter anderem auch eure SSH-Schlüssel ab, und unter Windows die von PuttyGen erzeugte PPK-Datei, die man sinnigerweise id_rsa.ppk
nennt.
In diesem Verzeichnis wird sich später auch die Datei known_hosts
anlegen, in der alle Informationen über von euch als vertrauenswürdig eingestufte SSH-Hosts hinterlegt werden.
Unter Windows solltet ihr GitBash als Terminal-Programm verwenden, um die volle Power dieser Dateien nutzen zu können.
Eure SSH-Lesezeichen
In dem SSH-Verzeichnis erzeugt ihr nun einen Datei namens config
– dies ist die SSH-Config-Datei. Euer .ssh
-Verzeichnis sollte nun wie folgt aussehen:
config
id_rsa
id_rsa.ppk # Windows
id_rsa.pub
known_hosts
In die SSH-Config-Datei kommen nun die Verbindungsdaten für Hosts, die ihr euch merken (oder vereinfachen) wollt. Eine SSH-Config ist eine einfache Textdatei, in der ihr für jeden Host ein paar Zeilen Konfiguration hineinschreibt. Das Format ist dabei denkbar einfach und selbsterklärend:
Host *.secret-site.com
User dwayne
Port 2020
Host my-blog blog.example.com
Hostname 192.168.178.12
Port 2222
User wayned
# --------------------------------------
# Fallback
Host *
User www-data
ServerAliveInterval 5
ServerAliveCountMax 10
Neben IPs, Hostnamen, Benutzernamen und Ports kann man eigentlich alle relevanten Informationen für eine SSH-Verbindung ablegen – mit Ausnahme eines Passworts. Da ihr SSH-Verbindung aber sowieso über einen SSH-Schlüssel aufbauen solltet, ist dies keine wirkliche Einschränkung.
Mit dem obigen Beispiel kann man sich ab sofort eine Menge Tipparbeit sparen. Statt länglicher Kombinationen aus Benutzernamen, IPs und Ports könnt ihr (und jeder der oben genannten Programme) den von euch definierten Shortcut aufrufen:
$ ssh -p 2222 wayne@192.168.178.12 # vorher
$ ssh my-blog # nachher
Das Tolle ist: Die SSH-Config-Datei ist nicht nur ein Shortcut und Bookmark, sondern dient eurer eigenen Dokumentation aller eurer Verbindung. Außerdem kann man sich ein relativ einfaches System überlegen, um z.B. projektspezifische Hostnamen einfach zu standardisieren:
# --------------------------------------
# Projekt A
Host PROJECTA-develop
# ... Konfiguration
Host PROJECTA-staging
# ... Konfiguration
Host PROJECTA-production
# ... Konfiguration
# --------------------------------------
# Projekt B
Host PROJECTB-develop
# ... Konfiguration
Host PROJECTB-staging
# ... Konfiguration
Host PROJECTB-production
# ... Konfiguration
Findige Naturen erkennen hier natürlich schöne Ansätze, um projektübergreifende Deployment-Tools zu entwickeln. 😉
Übrigens: Dieses Format eignet sich auch hervorragend zur Dokumentation von SSH-Zugangsdaten in Teams. So könnt ihr z.B. in Wikis SSH-Zugangsdaten hinterlegen, die der nächste Entwickler nur noch per Copy und Paste bei sich einfügen muss. Damit könnt ihr auch sicher stellen, dass alle Mitglieder eures Teams die selben Hostnamen verwenden, und z.B. interne Tools sich auf bestimmte Hostnamen verlassen können.
Mehr Details über die vielen Möglichkeiten von SSH-Configs findet ihr in der hervorragenden Anleitung zur Konfiguration der SSH-Config.