GitHub + SSH unter Windows 10

Wer auf seine eigenen Git-Repositories unter GitHub mit einem Git-Client zugreifen möchte, der hat die Wahl dies per HTTPS oder SSH zu machen. HTTPS bedeutet, Du musst dich mit Benutzername und Kennwort authentifizieren. Eine wesentlich sichere Alternative ist jedoch eine Authentifizierung mittels SSH-Schlüsselpaar. Dieser Blog-Artikel zeigt Euch, wie Ihr GitHub zusammen mit SSH unter Windows 10 nutzen könnt.

Git

Git-Logo

Git ist ein verteiltes Versionsverwaltungssystem (Englisch: Distributed version-control system) und bildet die technologische Grundlage für Cloud-Dienste wie GitHub. Auch wenn es natürlich andere Versionsverwaltungssysteme gibt, so hat sich Git in der Open Source-Gemeinde als De-facto-Standard weitestgehend durchgesetzt. Git ist selbst ein Open Source-Projekt unter der GPLv2-Lizenz.

Wer sein Wissen zu Git auffrischen oder vertiefen möchte, dem empfehle ich die kostenlose Online-Version des Buches Pro Git. Es gibt auch eine teilübersetzte deutsche Version.

Um auf ein eigenes Git-Repository unter GitHub zugreifen zu können, benötigst Du einen Git-Client. Entweder Du installierst Dir Git für Windows und arbeitest mit der Eingabeaufforderung, oder Du installierst Dir eine der zahlreichen GUIs. Zu empfehlen wären SourceTree oder GitHub Desktop.

Authentifizierung per SSH

Secure Shell (SSH) ist ein Netzwerkprotokoll zum sicheren Fernsteuern von Netzwerkdiensten über ein unsicheres Netzwerk (z.B. das Internet). Seit dem April 2018-Update von Windows 10 (Version 1803) unterstützt Windows OpenSSH als Software-Bibliothek. Dies erlaubt u.a. die Erzeugung von kryptografischen Schlüsselpaaren für SSH ohne Installation einer Zusatzsoftware.

Der große Vorteil von SSH gegenüber einem Zugriff per HTTPS ist, dass bei dieser Methode Dein privater SSH-Schlüssel nicht den Rechner verlässt, er also weder abgefangen noch durch einen Brute-Force-Angriff erraten werden kann. Dies setzt allerdings voraus, dass Dein Computer abgesichert ist und auch bei einem Diebstahl nicht sofort geknackt werden kann, denn der private SSH-Schlüssel ist dort dauerhaft gespeichert. Es wird daher dringend empfohlen, den privaten SSH-Schlüssel mit einem starken Kennwort zu schützen.

Ein Schlüsselpaar erzeugen

Öffne auf Deinem Windows 10-Rechner die Windows-Kommandozeile und tippe folgendes ein:

cd %USERPROFILE%\.ssh\
ssh-keygen -t ed25519

Du bekommst folgende Meldung angezeigt:

Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\frank/.ssh/id_ed25519):

Bestätige mit der Eingabetaste.

Jetzt wirst Du gefragt, ob Du ein Kennwort zum Absichern Deines privaten Schlüssels definieren möchtest. Dies ist dringend zu empfehlen.

Enter passphrase (empty for no passphrase):

Das einmal eingegebene Kennwort musst Du zur Sicherheit noch einmal wiederholen:

Enter same passphrase again:

Jetzt wird ein neues Schlüsselpaar generiert und ein Meldung wie diese erscheint in Deiner Kommandozeile:

Your identification has been saved in C:\Users\frank/.ssh/id_ed25519.
Your public key has been saved in C:\Users\frank/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:7KMZvJiITZ+HbOyqjNPV5AeC5As2GSZES5baxy1NIe4 localhost1@Frank
The key's randomart image is:
+--[ED25519 256]--+
|E   ..o=*o.+o    |
|.   .oo+oo...    |
|....  o=..       |
| o+. o  =        |
|o .oo ooS.       |
|* ...+o oo       |
|oo.. o+o+o       |
| .   o+o+o       |
|      .o..       |
+----[SHA256]-----+

Die Meldung bedeutet, dass in der Datei C:\Users\frank\.ssh\id_ed25519 der private Schlüssel und in der Datei C:\Users\frank\.ssh\id_ed25519.pub der öffentliche Schlüssel gespeichert wurde.

Anmerkung: Wir haben hier bewusst einen Ed25519-Schlüssel erzeugt. Dieser wird momentan als sicherster Schlüsseltyp für OpenSSH empfohlen. Standardmäßig (also ohne Type-Option) erzeugt ssh-keygen einen RSA-Schlüssel.

Den öffentlichen Schlüssel GitHub bekanntmachen

Der private Schlüssel ist privat und darf unter keinen Umständen veröffentlicht werden. Der öffentliche Schlüssel muss jedoch GitHub bekanntgemacht werden.

  1. Öffne die Datei C:\Users\frank\.ssh\id_ed25519.pub in einem Texteditor Deiner Wahl und kopiere den gesamten Text in die Windows-Zwischenablage.

  2. Jetzt öffne Deinen Web-Browser und melde Dich wie gewohnt bei GitHub an.

  3. In der oberen rechten Ecke klicke auf Dein Profilbild. Ein Menü öffnet sich.

  4. Klicke dort auf Settings. Eine neue Webseite öffnet sich.

  5. Klicke in der linken Navigation auf den Punkt SSH and GPG keys. Eine neue Webseite öffnet sich.

  6. Klicke rechts oben auf den grünen Schalter New SSH key. Ein Popup-Fenster öffnet sich.

  7. Tippe unter Title einen aussagekräftigen Namen (z.B. Mein Laptop) ein.

  8. Füge unter Key den öffentlichen SSH-Schlüssel aus der Windows-Zwischenablage ein.

  9. Bestätige mit Add key.

  10. Falls gefordert, musst Du jetzt noch einmal mit Deinem GitHub-Kennwort bestätigen.

So, GitHub weiß jetzt Bescheid. Du kannst Dich ab sofort per SSH mit GitHub verbinden.

Verwaltung der SSH-Schlüssel unter GitHub

Verwaltung der SSH-Schlüssel unter GitHub

SSH-Zugriff auf GitHub testen

Öffne die Windows-Kommandozeile und tippe folgendes ein:

ssh -T git@github.com

Wenn alles gut läuft, antwortet GitHub mit:

The authenticity of host 'github.com (140.82.118.3)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?

Die erste Zeile besagt, dass der SSH-Client auf Deinem Computer zum ersten Mal eine SSH-Verbindung zu GitHub aufbaut und daher nicht entscheiden kann, ob dieser vertrauenswürdig ist. Diese Entscheidung musst Du selbst treffen. Dazu kannst Du prüfen, ob der angezeigte fingerprint des antwortenden Servers auch wirklich von einem GitHub-Server stammt. Gehe dazu auf folgende GitHub-Seite und vergleiche die Werte.

Ist der Vergleich positiv, dann antworte mit yes. GitHub antwortet nun wie folgt:

Warning: Permanently added 'github.com,140.82.118.3' (RSA) to the list of known hosts.
Enter passphrase for key 'C:\Users\frank/.ssh/id_ed25519':

Der GitHub-Server ist nun als vertrauenswürdiger Server auf Deinem lokalen Computer registriert.

Du musst jetzt das Kennwort für Deinen privaten SSH-Schlüssel eintippen und bestätigen. Ist das Kennwort korrekt, dann antwortet GitHub wie folgt:

Hi frank! You've successfully authenticated, but GitHub does not provide shell access.

Yippie, Du bist jetzt bei GitHub authentifiziert.

Kennwortabfrage automatisieren

Bei jedem SSH-Zugriff auf GitHub wirst Du nach dem Kennwort für Deinen privaten SSH-Schlüssel gefragt. Das nervt natürlich. Gott Sei Dank gibt es eine Lösung dafür.

  1. Öffne die Windows-Dienstverwaltung.

  2. Öffne die Eigenschaften des Dienstes OpenSSH Authentication Agent, stelle den Starttyp auf Automatisch (Verzögerter Start) und bestätige mit OK.

  3. Starte den Dienst OpenSSH Authentication Agent.

    OpenSSH Authentication Agent konfigurieren

    OpenSSH Authentication Agent konfigurieren

Du hast jetzt einen OpenSSH Authentication Agent gestartet und so konfiguriert, dass er dauerhaft aktiv ist. Dieser Dienst speichert Deinen privaten SSH-Schlüssel in einem Zwischenspeicher und gibt ihn auf Anfrage zurück. Du musst also nur einmal Dein Kennwort eingeben, danach lässt Dich SSH in Ruhe.

Du musst dem SSH-Agent natürlich noch mitteilen, wie Dein privater Schlüssel heißt. Öffne wieder die Windows-Kommandozeile und tippe folgendes ein:

ssh-add C:\Users\frank\.ssh\id_ed25519

Der OpenSSH Authentication Agent fragt jetzt nach dem Kennwort für Deinen privaten SSH-Schlüssel:

Enter passphrase for C:\Users\frank\.ssh\id_ed25519:

Ist das Kennwort korrekt, dann erhältst Du folgende Antwort:

Identity added: C:\Users\frank\.ssh\id_ed25519

Ab jetzt wirst Du nicht mehr nach Deinem Kennwort gefragt.

SSH mit Git für Windows

Falls noch nicht geschehen, installiere Git für Windows auf Deinem Rechner.

Als nächstes musst Du eine neue Windows-Umgebungsvariable definieren:

  1. Öffne den Windows-Explorer.

  2. Klicke mit der rechten Maustaste auf Dieser PC und klicke im Kontextmenü auf Eigenschaften.

  3. Klicke auf Erweiterte Systemeinstellungen. Ein Dialogfenster öffnet sich.

  4. Klicke auf die Schaltfläche Umgebungsvariablen.

  5. Unter Benutzervariablen für <Name Deines Rechners> klicke auf Neu.

  6. Trage folgenden Werte ein:

    • Name der Variablen = GIT_SSH

    • Wert der Variablen = C:\Windows\System32\OpenSSH\ssh.exe

  7. Bestätige alle Dialoge mit OK.

Git arbeitet nun mit dem SSH-Client von Windows 10 zusammen.

Öffne die Windows-Kommandozeile und klone Dein erstes Repository per SSH:

git clone git@github.com:frank/mein-projekt.git

Bitte beachte die SSH-kompatible URL (Benutzername und den Namen des Repositories musst Du natürlich durch Deine Angaben ersetzen).

SSH mit SourceTree

Falls noch nicht geschehen, installiere SourceTree auf Deinem Rechner. Wir betrachten hier die SourceTree-Installation mit eingebettetem Git.

  1. Öffne SourceTree.

  2. Klicke auf Tools > Options. Ein Dialogfenster öffnet sich.

  3. Auf der Registerkarte General unter SSH Client Configuration mache folgende Änderungen:

    • Wähle unter SSH Client den Wert OpenSSH aus.

    • Wähle unter SSH Key Deinen privaten SSH-Schlüssel aus, in unserem Beispiel also C:\Users\frank\.ssh\id_ed25519.

  4. Bestäige den Dialog mit OK.

SSH in SourceTree konfigurieren

SSH in SourceTree konfigurieren

Du kannst jetzt in SourceTree Dein erstes Repository per SSH klonen. Bitte achte darauf, dass Du die SSH-kompatible URL benutzt, also z.B.

git@github.com:frank/mein-projekt.git

Nachtrag: GitLab, BitBucket, Azure DevOps

Wer nicht mit GitHub sondern mit GitLab, BitBucket oder Azure DevOps seine Git-Repositories verwaltet, der kann selbstverständlich auch bei diesen Cloud-Diensten einen Git-Zugriff per SSH einrichten. Es gelten die gleichen Voraussetzungen zum Erstellen einen SSH-Schlüsselpaares. Das Hinzufügen des öffentlichen Schlüssels zum Cloud-Dienst unterscheidet sich natürlich etwas. Hier die entsprechenden Dokumentationen:

Das könnte dich auch interessieren:
  1. Windows 2019 per SSH fernsteuern
  2. PostgreSQL 10: Backups erstellen
  3. pgAdmin 4 unter Windows 10
  4. PostgreSQL 10 unter Windows 2019
  5. TLS unter IIS 10 absichern
Teile diesen Artikel
comments powered by Disqus