Mit Beginn meines Praktikums hatte ich plötzlich zwei GitHub-Accounts. Da stellte sich die Frage: wie kann ich erreichen, dass ich parallel an meinen privaten Repositories und denen der Firma arbeiten kann und beim pushen und pullen jeweils die richtige Remote-Adresse benutzt wird?
Die Lösung: für jedes Repository einen eigenen SSH-Key verwenden und in einer Konfigurationsdatei die nötigen Parameter definieren.
Dafür habe ich hier einmal die Abfolge der Schritte festgehalten und hoffe, dass es vielleicht hilft, die mühselige Recherche zu verkürzen.
Schritt 1: Generierung von SSH-Schlüsseln
Die Befehlseingaben in der CMD und bash sind weitestgehend gleich. Bei Windows ist der Slash durch Backslash zu ersetzen.
$ ssh-keygen -t ed25519
Eingabeaufforderungen:
- Dateinamen für den Schlüssel festlegen (frei wählbar)
- Passwort eingeben (nicht zwingend erforderlich, kann man leer lassen)
Nach Abschluss dieses Schritts werden die Schlüssel generiert, und es erscheint ein Fingerabdruck zusammen mit einem zufälligen Kunstbild.
Schritt 2: Hinzufügen von Schlüsseln zum SSH-Agent
Auf Windows muss möglicherweise der SSH-Agent installiert werden. In der PowerShell müssen dazu folgende Befehle als Administrator ausgeführt werden:
PS C:\Windows\system32> Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
PS C:\Windows\system32> start-ssh-agent.cmd
Anschließend müssen die privaten Schlüssel zum SSH-Agent hinzufügt werden:
$ ssh-add ~/.ssh/id_erik-berndt
$ ssh-add ~/.ssh/id_rsa
Schritt 3: Hinzufügen von öffentlichen Schlüsseln zu GitHub
Öffentlichen Schlüssel mit cat
oder type
(Windows) anzeigen lassen und kopieren:
$ cat ~/.ssh/id_erik-berndt.pub
Dann beim jeweiligen GitHub-Account anmelden und unter
Settings (global) -> SSH and GPG Keys -> New SSH key (grüner Button)
den öffentlichen Schlüssel mit einem aussagekräftigen Namen eintragen.
Schritt 4: Konfiguration der SSH-Konfigurationsdatei
Falls keine SSH-Konfigurationsdatei existiert, muss sie erstellt werden. Einträge für jedes GitHub-Konto haben dann folgende Syntax:
# ~/.ssh/config
...
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Host erik-berndt
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_erik-berndt
...
Schritt 5: Testen der Verbindung
Sicherstellen, dass GitHub zu den bekannten Hosts hinzugefügt ist:
$ ssh-keyscan github.com >> ~/.ssh/known_hosts
Die Verbindung zu GitHub testen:
$ ssh -T git@github.com
$ ssh -T git@erik-berndt
Bei erfolgreichem Abschluss wird eine Willkommensnachricht ausgegeben, die eine erfolgreiche Authentifizierung bestätigt.
Schritt 6: Klonen von Repositories
Nun kann man Repositories mithilfe der konfigurierten Host-Aliasnamen klonen:
$ git clone git@github.com:pytherik/<repository_name>.git # Standardkonto
$ git clone git@erik-berndt:erik-berndt/<repository_name>.git # anderes Konto
Das sorgt dafür, dass der remote Eintrag im lokalen Repository auf den richtigen Account zeigt:
$ git remote -v # remote Einstellungen anzeigen
Mit diesen Schritten ist man bereit, mit seinen GitHub-Repositories unter Verwendung von SSH-Schlüsseln zu arbeiten.
Happy hacking!