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 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 folgendes Material:
- Git-Grundlagen für Entwickler - BASTA!-Vortrag auf YouTube zum Einstieg
- Learn Git Branching - Ein interaktiuves Tutorial
- Oh Shit, Git!?! - Konkrete Hilfen, wenn man Mist gebaut hat
- Pro-Git - Die umfangreiche Referenz
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 folgende Befehlssequenz ein:
mkdir %USERPROFILE%\.ssh\
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.
-
Öffne die Datei
C:\Users\frank\.ssh\id_ed25519.pub
in einem Texteditor Deiner Wahl und kopiere den gesamten Text in die Windows-Zwischenablage. -
Jetzt öffne Deinen Web-Browser und melde Dich wie gewohnt bei GitHub an.
-
In der oberen rechten Ecke klicke auf Dein Profilbild. Ein Menü öffnet sich.
-
Klicke dort auf
Settings
. Eine neue Webseite öffnet sich. -
Klicke in der linken Navigation auf den Punkt
SSH and GPG keys
. Eine neue Webseite öffnet sich. -
Klicke rechts oben auf den grünen Schalter
New SSH key
. Ein Popup-Fenster öffnet sich. -
Tippe unter
Title
einen aussagekräftigen Namen (z.B.Mein Laptop
) ein. -
Füge unter
Key
den öffentlichen SSH-Schlüssel aus der Windows-Zwischenablage ein. -
Bestätige mit
Add key
. -
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.
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.
-
Öffne die Windows-Dienstverwaltung.
-
Öffne die Eigenschaften des Dienstes
OpenSSH Authentication Agent
, stelle den Starttyp aufAutomatisch (Verzögerter Start)
und bestätige mitOK
. -
Starte den Dienst
OpenSSH Authentication Agent
.
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:
-
Öffne den Windows-Explorer.
-
Klicke mit der rechten Maustaste auf
Dieser PC
und klicke im Kontextmenü aufEigenschaften
. -
Klicke auf
Erweiterte Systemeinstellungen
. Ein Dialogfenster öffnet sich. -
Klicke auf die Schaltfläche
Umgebungsvariablen
. -
Unter
Benutzervariablen für <Name Deines Rechners>
klicke aufNeu
. -
Trage folgenden Werte ein:
-
Name der Variablen =
GIT_SSH
-
Wert der Variablen =
C:\Windows\System32\OpenSSH\ssh.exe
-
-
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.
-
Öffne SourceTree.
-
Klicke auf
Tools > Options
. Ein Dialogfenster öffnet sich. -
Auf der Registerkarte
General
unterSSH Client Configuration
mache folgende Änderungen:-
Wähle unter
SSH Client
den WertOpenSSH
aus. -
Wähle unter
SSH Key
Deinen privaten SSH-Schlüssel aus, in unserem Beispiel alsoC:\Users\frank\.ssh\id_ed25519
.
-
-
Bestäige den Dialog mit
OK
.
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:
- SSH-Schlüssel zum GitLab-Konto hinzufügen
- SSH-Schlüssel zum BitBucket-Konto hinzufügen
- SSH-Schlüssel zum Azure DevOps-Konto hinzufügen
Artikelhistorie
- 20.12.2019
- Erstveröffentlichung
- 14.01.2022
- Mehr Empfehlungen zum Erlernen von Git