SSH Schlüssel & GitLab
Von Bettina Bröthaler am 19.09.2021
Definition, Verwendung von mehreren SSH Schlüsseln mit GIT
Definition SSH Schlüssel
Bei SSH Schlüsseln (Secure Shell) handelt es sich um eine Zugangsberechtigung, die im SSH Protokoll verwendet werden. Die Schlüssel gibt es in vielen Größen, die beliebteste Wahl ist eine RSA 2048 Bit Verschlüsselung, welche mit einem 617 Stellen langen Passwort vergleichbar ist. SSH Schlüssel liegen also immer paarweise vor und jedes Paar besteht aus einem privaten und einem öffentlichen Schlüssel. [1]
Der private Schlüssel bleibt auf dem System, das für den Zugriff auf ein entferntes System verwendet wird, also auf dem Desktop oder Laptop des Benutzter. In Zusammenhang mit einem GIT Repository, also dem Ort, an dem ein Projekt geklont wird. Der private Schlüssel wird dann zum Entschlüsseln von Informationen verwendet, welche im SSH Protokoll ausgetauscht werden. Private Schlüssel sollten nie mit jemandem geteilt werden und sicher auf dem System gespeichert werden. Bei der Erstellung eines SSH Schlüssels kann auch ein Passwort vergeben werden, um dem Schlüssel zu sichern. [1]
Ein öffentlicher Schlüssel wird, im Gegensatz zum Privaten, zur Verschlüsselung von Informationen verwendet, kann weitergegen werden. Dieser Schlüssel wird im Zusammenhang mit GIT im Repository hinterlegt. [1]
Einen SSH Schlüssel generieren
Mit dem Befehl ssh-keygen
kann ein neuer SSH Key generiert werden. Dieser Befehl kann direkt über die Kommandozeile ausgeführt werden.
$ ssh-keygen -t rsa -C "username"
Nach dieser Eingabe wird der Speicherort festgelegt. Standardmäßig wird vorgeschlagen den Schlüssel in das ./ssh
Verzeichnis abzuspeichern in die Datei id_rsa
. Wenn der Vorgegebene Pfad verwendet werden soll kann man dies einfach mit der Eingabetaste bestätigen. Wenn ein anderer Pfad verwendet werden soll kann hier ein anderer Pfad definiert werden, beispielsweise:
/C/Users/Betti/.ssh/username
Danach kann man ein Passwort angeben, um die Verwendung zu sichern. Mit Enter kann man dies auch überspringen und das Passwort leer lassen. Danach wird die Wiederholung des Passwortes gefordert.
Nach der Wiederholung des Passwortes wird der SSH Schlüssel generiert und abgespeichert. Wenn man hier das ./ssh
Verzeichnis öffnet kann man die genierten Dateien sehen.
In Abbildung 4 sieht man die beiden Dateien. Die erste Datei username beinhaltet den privaten Schlüssel die Datei username.pub den Öffentlichen. Erkennbar ist hier es wird der eingegebene String als Dateiname übernommen.
In Abbildung 5 sieht man das Ergebnis von einer SSH Generierung, wenn die Pfad Eingabe den Standard beinhaltet. Standardmäßig werden hier also Dateien generiert mit dem Namen id_rsa
.
Kopieren eines „Public Keys“
Um den öffentlichen Schlüssel zu verwenden muss dieser kopiert werden. Hierfür gibt es mehrere Möglichkeiten. Zum einen kann das ./ssh
Verzeichnis mit einem Text Editor geöffnet werden und die .pub
Datei des gewünschten Schlüssels geöffnet werden. Hier kann der String direkt kopiert werden.
Ein anderer Weg ist das Kopieren des Schlüssels über die Kommandozeile:
$ clip < ~/.ssh/username.pub
Durch den clip
Befehl wird der öffentliche Schlüssel aus der username.pub Datei direkt in den Zwischenspeicher geladen. (Funktioniert nicht auf MAC)
$ cat ~/.ssh/username.pub
Mit cat
wird der Schlüssel im Terminal angezeigt und kann von dort kopiert werden. (Funktioniert auf MAC)
GIT Repository und SSH
SSH ist eine von mehreren Möglichkeiten ein GIT Repository zu klonen. Hierzu hat man in einem Repository einen Link der direkt genutzt werden kann.
Für das Klonen einen Projekts muss zuerst der öffentliche SSH Key im GIT Konto hinterlegt werden, damit die Verbindung funktioniert.
Beim Hinzufügen ist es möglich mehrere Schlüssel zu hinterlegen und diese auch mit einem identifizierbaren Titel sowie einem Ablaufdatum zu versehen. Sobald die Schlüssel am lokalen System und im GIT Konto hinzugefügt wurden kann ohne weitere Anmeldung Daten übertragen werden.
Mehrere SSH Schlüssel auf einem System
Soweit so gut, jetzt kommt aber dazu, dass ein einzelner Benutzer mehrere Arbeitsplätze hat. Einen Laptop, einen PC, einen Rechner zuhause, einen in der Firma. Im GIT Konto ist das leicht gelöst, es können mehrere SSH Schlüssel hinterlegt werden. Auf jedem Rechner, der auf das Projekt zugreifen möchte, muss also ein eigener Schlüssel generiert werden und im GIT Konto hinterlegt werden.
Aber nun hat ein Nutzer nicht nur mehrere Arbeitsplätze, sondern auch mehrere GIT Konten. Nehmen wir eines für private Projekte, eines von der Universität oder Fachhochschule und eines vom Arbeitsplatz. Besonders in der momentanen Zeit ist Heimarbeit ein großes Thema und hier kommen mehrere Konten zusammen.
Eine Lösung wird in Stack Overflow [2] beschrieben und zwar die Nutzung einer Konfigurationsdatei für SSH Schlüssel. In dieser Datei werden die verschiedenen Hosts und der Pfad zur jeweiligen Schlüsseldatei hinterlegt.
Weiter oben wurden zwei Schlüsselpaare generiert und im ./ssh
Verzeichnis gespeichert. In diesem Ordner erstellt man zusätzlich eine config
Datei:
In Abbildung 9 sieht man die Konfiguration. Hier wird der Host angegeben sowie, dass die Authentifizierung mittels öffentlichen Schlüssel stattfinden sollte. Im IdentityFile
wird dann der Pfad zum privaten Schlüssel angegeben. Beispielsweise wurde der id_rsa
Schlüssel für das private GIT Konto generiert und wird zur Datenübertragung verwendet sowie der username
Schlüssel für den Zugriff auf xy.gitlab.com
verwendet werden soll.
Im lokalen GIT Projekt kann dann, wie folgt, noch die Konfiguration für den Benutzer hinterlegt werden:
$ git config user.name “username”
$ git config user.email “username@email.com”
Quellenverzeichnis
1. Blanton S. What are SSH Keys? [Internet]. JumpCloud. 2021 [cited 2021 May 9]. Available from: https://jumpcloud.com/blog/what-are-ssh-keys
2. Best way to use multiple SSH private keys on one client [Internet]. Stack Overflow. [cited 2021 Sep 19]. Available from: https://stackoverflow.com/questions/2419566/best-way-to-use-multiple-ssh-private-keys-on-one-client
Abbildungsverzeichnis
- “ssh-keygen” Eingabe und Pfad Angabe.
- Passwort Eingabe
- Schlüssel Generierung im Terminal
- Screenshot: Ausschnitt SSH Verzeichnis in Visual Studio Code.
- Screenshot: Ausschnitt SSH Verzeichnis in Visual Studio Code Standardgenerierung
- Ausgabe der Kopierbefehle im Terminal
- Übertragungslinks GIT Repository
- Hinzufügen eines Public SSH Keys im GIT Konto
- GIT Konfigurationsdatei
The comments are closed.