Wie ich im letzten Beitrag zum Thema aufgezeigt habe, kann man mit der SSH mit vertretbaren Aufwand ein System aufbauen, das unter Verwendung von Schlüsselpaaren die Authentifizierung für Verbindungen zwischen zwei Systemen sicherstellt. Das Ergebnis erscheint auf den ersten Blick unbefriedigend: anstatt des Kennworts muss man nun bei jedem Verbindungsaufbau die Passphrase des privaten Schlüssels eingeben.
Diese Passphrase ist zwar keine Pflicht (man kann den Schlüssel auch ungeschützt im Dateisystem ablegen), aber so sensitive Daten sollte man nicht unverschlüsselt herumliegen lassen. Auf Linux-Servern sind unverschlüsselte private Schlüssel beim Betrieb von HTTPS-Webservern durchaus gängige Praxis, hat aber das gleiche Risiko. Mac OS X wiederum bietet hier aber Abhilfe: die Mac OS X Keychain (aka Schlüsselbund).
Mac OS X Server macht davon selbst Gebrauch. Legt man HTTPS-Dienste an, besteht das Administrationsprogramm darauf, die Schlüssel mit einer Passphrase zu versehen. Diese wird dann im System-Schlüsselbund abgelegt. Das ist zwar im Prinzip auch nur ein schwacher Schutz (schliesslich muss der Server auch darauf automatisiert zugreifen), aber es ist immerhin eine weitere Hürde aufgebaut (der Schlüssel muss über einen autorisierten Weg aus einer verschlüsselten Datei geholt werden). Aber mich interessiert hier mehr die Client-Seite (und muss auch zugeben, nicht viele weitere Details zu der Art, wie hier Mac OS X Server genau vorgeht, zu wissen).
Für die tägliche Anwendung auf der Kommandozeile bietet SSH bereits eine Lösung: der ssh-agent ist ein Hintergrundprozess, dem man einmal mit der Passphrase für den Schlüssel versieht und der dann in der Folge auf Anfrage einem SSH-Client den unverschlüsselten privaten Schlüssel bereitsteht. Man kann konfigurieren, wie lange der Agent den Schlüssel vorhält etc. pp. Für Leute, die ohnehin nur in der Kommandozeile zu Hause sind, eine passable Lösung.
Da diese Methode dem Mac OS X Schlüsselbund so ähnlich ist, liegt eine Integration auf der Hand und die Lösung gibt es bereits (in verschiedener Form). Das Programm, das ich ans Herz legen möchte und dass zu meiner Mac-Grundausstattung gehört, ist SSHKeychain, das jüngst in einer überarbeiteten Fassung und endlich auch als Intel-Binary erschienen ist.
SSHKeychain schlägt die Brücke zwischen dem ssh-agent und dem Mac OS X Schlüsselbund, in dem es im Environment (das, was man in der Kommandozeile durch Eingabe von “env” anzeigen lassen kann eine Kontaktadresse für den SSH-Client hinterlässt. Das sieht dann so aus:
SSH_AUTH_SOCK=/tmp/501/SSHKeychain.socket
Dadurch weiss die SSH, wie sie mit SSHKeychain kommunizieren soll. SSHKeychain fungiert nun als ssh-agent, legt aber die Passphrase in der privaten Keychain des Benutzers ab. Das Ergebnis ist, dass wann auch immer die Keychain geöffnet ist, die Eingabe der Passphrase entfällt. Das funktioniert für die SSH auf der Kommandozeile wie auch für SSH-kompatible Programme mit GUI gleichmassen.
Noch als ich diesen Beitrag schrieb wurden Sicherheitsprobleme in der Version 0.8.1 veröffentlicht. Seit heute gibt es die Version 0.8.2, die die geschilderten Probleme angeblich gelöst haben soll. Seit Version 0.8 gibt es SSHKeychain auch in einer Intel-Version.
Trotz aller Einfachkheit, die der Einsatz von SSHKeychain bringt, er macht ggf. die Sache auch unsicherer. Das muss jeder für sich abwägen. Es ist sicherlich generell zu empfehlen, seiner Keychain so einzustellen, dass sie beim Schlafen des Rechners und nach einem bestimmten Inaktivitäts-Timeout automatisch schließt. Das lässt sich im “Bearbeiten” Menü der Schlüsselbund-Applikation für jedes Schlüsselbund manuell einstellen.
Als nächstes werde ich ein paar Programme vorstellen, die prima mit SSHKeychain zusammenarbeiten.
Neuste Kommentare