SSH-Schlüssel sind die Eintrittskarte für SSH, Git, und viele andere darauf aufbauende, nützliche Dienste, die ein Programmierer nutzen möchte. Während unter Linux und Mac OSX das Erzeugen eines SSH-Schlüssels eine schmerzlose Sache ist, sind unter Windows mehr Handgriffe gefragt, um alle Anwendungsfälle eines SSH-Schlüssels abbilden zu können – unter anderem für die Verwendung des selben Schlüssels aus einer Virtualisierung wie zum Beispiel VirtualBox oder Docker.

Generell gibt es zwei Arten, unter Windows einen SSH-Schlüssel zu speichern:

  • Das PuTTY Private Key-Format (ppk)
  • Das unter UNIX bekannte OpenSSH-Format mit zwei Dateien für den privaten und öffentlichen Teil des Schlüssels

Viele Anleitungen beschränken sich auf die eine oder andere Methode zum Anlegen von SSH-Schlüsseln. Tatsächlich macht es aber unter Windows sehr viel Sinn, den eigenen Schlüssel in beiden Formate verfügbar zu haben. Das geht deutlich schmerzloser, wenn beide Schlüsselformate in einem Aufwasch angelegt werden.

  1. Zuallererst werden die PuTTY Utilities installiert – diese beinhalten neben PuTTY auch den puttygen Schlüsselgenerator, pageant Schlüsselagenten und das plink SSH-Verbindungstool.
  2. Ebenfalls wird Git für Windows benötigt – hier ist wiederum Git Bash enthalten, einen Linux-Bash-Emulator.
  3. Im nächsten Schritt muss Git Bash geöffnet werden und im eigenen Benutzerverzeichnis das SSH-Schlüsselverzeichnis mittels mkdir -p ~/.ssh angelegt werden.
  4. Jetzt wird PuTTYGen gestartet, um in dem just angelegten Verzeichnis (unter C:\Users\USERNAME\.ssh) die insgesamt drei Dateien anzulegen, die zusammen alle Schlüssel-Komponenten darstellen.

PuTTYGen

In PuttyGen selber wird es nun etwas trickreich:

  1. Als „Key comment“ gibt wird die eigene E-Mail-Adresse verwendet. Das hilft später bei der Identifikation des Schlüssels.
  2. Außerdem sollte eine Passphrase vergeben werden, die den Schlüssel schützt, falls die Schlüsseldateien abhanden kommen sollten.
  3. Nicht zuletzt sollte bei der Bitlänge des Schlüssel entweder 2048 oder aber gleich 4096 verwendet werden.
  4. Nun drückt ihr den Knopf „Generate“ und wischt mit der Maus über dem PuTTYGen-Fenster hin und her, um ein Zufallsmuster zu erzeugen. Im Anschluss hat das Programm einen Schlüssel generiert, den ihr wie folgt speichern müsst:
  5. Die PPK-Datei mittels „File → Save private key“ in C:\Users\USERNAME\.ssh\id_rsa.ppk speichern.
  6. Aus der oberen Textbox von PuTTYGen den „OpenSSH Public Key“ kopieren und in eine neue Datei in C:\Users\USERNAME\.ssh\id_rsa.pub einfügen (mit der Funktion „Save public key“ wird der Public Key nicht im korrekten Format exportiert).
  7. Mit „Conversions → Export OpenSSH key“ den Private Key unter C:\Users\USERNAME\.ssh\id_rsa speichern. Wichtig ist hierbei, dass keine Dateiendung verwendet wird.

In eurem SSH-Verzeichnis C:\Users\USERNAME\.ssh sollten nun mindestens drei Dateien liegen:

id_rsa.ppk # Privater / öffentlicher Schlüssel für PuTTY
id_rsa.pub # Öffentlicher Schlüssel für OpenSSH
id_rsa     # Privater Schlüssel für OpenSSH

Später werden in diesem Verzeichnis ggf. noch mehr Dateien auftauchen, wie z.B. known_hosts, authorized_keys und config.

Übrigens solltet ihr mit der Git Bash mittels chmod 644 ~/.ssh/* && chmod 600 ~/.ssh/id_rsa allen Dateien die korrekten Zugriffsrechte (-rw-r--r-- bzw. -rw-------) geben, falls dies nicht schon geschehen ist.

Verbindung, bitte

Den öffentlichen Schlüssel könnt ihr nun auf allen Servern und Diensten bekannt machen, mit denen ihr euch später verbinden wollt. Auf eurem Rechner wiederum wird die Git Bash automatisch den privaten OpenSSH-Schlüssel verwenden, während andere Programme den privaten Schlüssel aus der id_rsa.ppk entweder in den Einstellungen übergeben bekommen müssen, oder aber aus einem vorher zu startenden pageant Schlüsselagenten übernehmen können. Falls ihr SSH-Schlüssel für eure tägliche Arbeit benutzt, könnt ihr den Pageant auch automatisch starten und den Schlüssel laden lassen.

Viele Windows-Programme können so euren SSH-Schlüssel nutzen, u.a.:

So oder so seid ihr nun mit beiden Schlüsselformaten ausgestattet, so dass z.B. auch der Wechsel des Betriebssystems oder die Verwendung von Virtualisierung euch die Weiterbenutzung eures SSH-Schlüssels erlaubt.

Unter Linux und Mac OSX ist der Vorgang übrigens etwas kürzer:

ssh-keygen -t rsa -b 4096 -C "YOUR@EMAIL"