Schritt 3: Git Server konfigurieren und bare-Repository einrichten

In meiner virtuellen Entwicklungsumgebung möchte ich einen Git-Server installieren, damit kann ich sowohl von innerhalb der virtuellen Maschine als auch von anderen Clients auf die Git-Repositories zugreifen kann. Damit schaffe ich eine einfache Möglichkeit meine Dateien über mehrere Clients hinweg aktuell zu halten und zu verwalten.

Begriffserklärung

Bevor es losgeht sind noch die Unterschiede von einem normalen Git Repository und einem bare Git Repository zu definieren.

Normales Git Repository = git ini

Der Befehl „git init“ wurde bereits mal am Rande in diesem Artikel erwähnt Python Entwicklungsumgebung – Schritt 4: Atom Editor mit Git verbinden.
Es lässt sich damit in jedem beliebigen Verzeichnis durch den Entwickler/Benutzer ein lokales Git-Repository auf der Festplatte eines PCs erstellen. Es gibt dabei keine Verbindung zu einem Git-Server.
Der Entwickler legt sich das git-Repository nur für sich an, um seine lokalen Skripte damit auf seinem eigenen PC zu verwalten. In Atom ist das durch die tiefe Integration von Git und GitHub sehr einfach möglich.

Es handelt sich also um ein Git-Arbeits-Repository eines einzelnen Entwicklers.

bare Git Repository = git init –bare

Im Gegensatz dazu ist das bar Git Repository ausschließlich zum Teilen gedacht. Mit diesem Repository wird nicht direkt gearbeitet, sondern die Entwickler mit den Zugriffsrechten können Dateien dort einspielen (= commit) oder abholen (= pull)

Virtuelle Maschine – eigene IP-Adresse vergeben

Die virtuelle Maschine benötigt eine richtige IP-Adresse, damit Clients von außerhalb auf die Git-Repositories zugreifen können. Das einfachste ist eine Netzwerkbrücke für die virtuelle Maschine zu konfigurieren. Damit erhält die bei jedem Start vom DHCP-Server eine eigene IP-Adresse zugewiesen. Am besten startet ihr die Maschine und lasst euch die IP-Adresse anzeigen.

Netzwerkbrücke
Netzwerkbrücke

Am besten startet ihr die Maschine und lasst euch die IP-Adresse anzeigen.

ifconfig

Gib mir gerne einen Kaffee ☕ aus!

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕ ausgeben.

PayPal Logo


liberapay.com/strobelstefan.org


Kaffee via Bitcoin

bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


Git-Version prüfen

Git wird standardmäßig mit Ubuntu ausgeliefert. Die aktuelle Version könnt ihr einfach mit dem Befehl prüfen:

git version

Fehlt die Git-Installation auf eurer Maschine, lassen sich die Pakete über die Repositories einfach nachinstallieren.

sudo apt install git

Benutzer und Gruppen

Auf dem Git-Server sind noch einige Anpassungen an den Benutzern und Rechten vorzunehmen, um die Verwaltung ein wenig einfacher zu gestalten.

Es gibt zwei unterschiedliche Wege, wie man als Entwickler auf den Git-Server zugreifen kann.

  • Seperates Benutzerkonto pro Entwickler auf dem Git-Server
  • Gemeinsames Benutzerkonto für alle Entwickler

Git erkennt den jeweiligen Entwickler an dem in der „.gitconfig“ angegebenen Benutzernamen und der E-Mail-Adresse. Es sollte deshalb darauf geachtet werden, dass bei einer größeren Entwicklergruppe die Informationen aussagekräftig sind.

Ich fand es ganz gut, für Git eine eigene Benutzer-Gruppe anzulegen, in die jeder Benutzer aufgenommen wird. Das setzt voraus, dass jeder ein eigenes Benutzerkonto erhält und der Git-Gruppe zugeordnet wird.

sudo groupadd gitusers

Meinen bestehenden Benutzer „dev“ füge ich dann gleich der neuen Git-Gruppe hinzu.

sudo usermod -a -G gitusers dev

In Ubuntu werden die Gruppenzugehörigkeiten in der Datei /etc/group verwaltet und können dort über das Terminal eingesehen werden.

cat /etc/group
/etc/group - Gruppenzugehörigkeit
/etc/group – Gruppenzugehörigkeit

bare Git Repository anlegen

Die öffentlichen Git-Repositories habe ich das Verzeichnis „/srv/git/repositories“ auf dem Server angelegt und die Rechte entsprechend angepasst.

sudo mkdir -p /srv/git/repositories/test
sudo chgrp gitusers /srv/git/repositories/test
sudo chmod g+ws /srv/git/repositories/test
Git - Verzeichnis und Rechte
Git – Verzeichnis und Rechte

Die Initialisierung eines bare Git Repositories in dem soeben angelegten Verzeichnis geht mit

sudo git init --bare --shared=group /srv/git/repositories/test
git init --bare
git init –bare

Führt man im Verzeichnis ein „ls -la“ aus, sieht man, dass dort die erforderlichen Ordner und Dateien angelegt wurden.

Die aufgeführte Möglichkeit die Git-Benutzer über die Gruppe „gitusers“ auf dem Git-Server zu verwalten fand ich sehr transparent. Ihr könnt damit auch gleich per SSH einen Zugriff auf das Git-Repository erlangen, wenn ihr euren öffentlichen SSH-Schlüssel in diesem Konto hinterlegt. Wie das funktioniert beschreibe ich weiter unten.

Ich möchte aber auch noch zeigen, wie man den Zugriff auf das Git-Repository mit allgemeinen User ermöglichen kann.
Zu diesem Zweck lege ich den Benutzer „git“ an und füge den auch gleich der Gruppe „gitusers“ hinzu. Was auffällt, ich brauche dabei dem neuen Benutzer nicht mehr die Rechte für den Zugriff auf das Git-Repository gewähren. Die Zugriffsrechte bekommt der User „git“ automatisch mit der Gruppenzugehörigkeit zu „gitusers„.

sudo adduser git
sudo usermod -a -G gitusers git
User "git" hinzufügen
User „git“ hinzufügen

Die Gruppenzugehörigkeit lässt sich wieder in der Datei „/etc/group“ prüfen.

Gruppenzugehörigkeit "git"
Gruppenzugehörigkeit „git“

Der Benutzer „git“ wird in diesem Beispiel dafür genutzt um auf das Git-Repository von einem beliebigen Git-Client aus zuzugreifen. Es ist aber nicht zwingend erforderlich diesen Benutzer zu verwenden. Wie oben erwähnt funktioniert der Zugriff auch über euren eigenen Benutzer auf dem Git-Server. Ihr müsst den Benutzer lediglich der Gruppe „gitusers“ hinzufügen, so dass ein Zugriff auf das Verzeichnis „/srv/git/repositories/test“ möglich ist.

SSH-Server installieren

Die Kommunikation zwischen Git-Server und den angeschlossenen Clients geht über SSH. Damit das reibungslos funktioniert, muss auf dem Git-Server der SSH-Server installiert sein. Die Installation geht ebenfalls sehr einfach aus den Repositories.

sudo apt install openssh-server
OpenSSH-Server installieren
OpenSSH-Server installieren

Den SSH-Server kann man neustarten mit dem Befehl

sudo systemctl restart sshd

Ihr könnt bereits jetzt mit jedem Client auf die Linux-Maschine per SSH zugreifen.

ssh user@ip-adresse

Auf Windows-PCs könnt ihr als SSH-Client könnt ihr z.B. den bekannten PuTTY verwenden oder wie in diesem Beitrag ➡ Git installieren unter Ubuntu – Windows kurz beschrieben „Git Bash“.

Nach der erfolgreichen Installation des OpenSSH-Server können wir nun den Schlüsselaustausch vornehmen. Dabei verwende ich den Benutzer git, der im vorherigen Abschnitt angelegt wurde. Ihr könnt aber selbstverständlich auch euer eigenes Benutzerkonto auf dem Linux-Server verwenden.

Wir wechseln zum neuen Benutzer „git

su git

Die SSH-Schlüssel werden im Home-Verzeichnis der User im Ordner „~/.ssh“ in der Datei „authorized_keys“ gespeichert.

mkdir .ssh
touch .ssh/authorized_keys

Achtung!
Wenn ihr diesen Befehlt ausführt, dann ändert ihr die Zugriffsrechte auf die Datei. Der Benutzer „git“ hat dann keinen Zugriff mehr. Lediglich die User, die sudo verwenden dürfen können die Datei noch bearbeiten.

chmod 600 .ssh/authorized_keys

Eigenes SSH-Schlüsselpaar erzeugen

Wie ihr ein eigenes SSH-Schlüsselpaar erzeugen könnt habt ich in dem Artikel
Zugriff via SSH ohne Passworteingabe; Anmeldung erfolgt durch ausgetauschten SSH-Schlüssel beschrieben.


Nachdem der Schlüssel in der „authorized_keys“ hinterlegt ist, sollte der SSH-Dienst neu gestartet werden.

sudo systemctyl restart sshd

Hier gilt, führt ihr den Befehlt mit dem Benutzer „git“ aus, dann erhaltet ihr die Fehlermeldung:
„git is not in the sudoers file. The incident will be reported.“

Die Gruppenzugehörigkeit könnt ihr in der Datei „/etc/group“ einsehen.

cat /etc/group

Den Inhalt der Datei „authorized_keys“ könnt ihr z.B. mit dem Editor „nano“ bearbeiten.

sudo nano /home/git/.ssh/authorized_keys

Bildquelle: Gemeinfrei-ähnlich freigegeben durch unsplash.com Yancy Min

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert