fboës - Der Blog

Der Bookmark-Manager für SSH-Zugangsdaten

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.