Die vergangenen Tage habe ich mich damit beschäftig, einen GIT Server unter Linux zu installieren. Nach ein paar Fehlschlägen ist es mir schließlich irgendwie gelungen. Um das so gelernte beim nächsten Mal (falls es denn ein solches gibt) nicht erst mühsam im Internet zusammensuchen zu müssen, habe ich mich entschlossen, meinen Weg zu diesem kleinen Erfolg hier aufzuschreiben. Vielleicht hilft es ja nicht nur mir, sondern auch anderen Linux-Neulingen.
Voraussetzungen
Was ich vorgefunden habe, war ein funktionierender Linux-Rechner (Mint 20) mit SSH Zugang und ein Benutzer mit den erforderlichen Rechten für sudo.
Server einrichten
Ich wollte mir möglichst wenig Arbeit machen. Daher wollte ich auf einen Server mit Web-Oberfläche verzichten. Einfach sollte es sein und funktionieren. Daher habe ich mich für GIT über SSH entschieden. Der SSH Zugang war schon vorhanden und GIT war auch schon installiert. Also musste ich nur noch den GIT Server einrichten. Dabei war dieserArtikel von Andrew Hoog sehr hilfreich.
GIT installieren
sudo apt install git
Neuen Benutzer für GIT anlegen
sudo adduser --disabled-password git sudo su git cd ~ mkdir repos mkdir .ssh && chmod 700 .ssh touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
Zur Sicherheit sollte das normale Login für den git User unterbunden werden. Dieser Benutzer sollte nur die git-shell verwenden dürfen. Evtl. muss die git-shell vorher noch „installiert“ werden. Sehen wir also nach, ob sie bereits installiert ist.
cat /etc/shells
Wenn git-shell irgendwo in der angezeigten Liste erscheint, ist sie bereits installiert. Wenn sie fehlt, müssen wir sie zur Liste hinzufügen.
which git-shell sudo nano /etc/shells
Der erste Befehl zeigt den vollständigen Pfad der Shell an. Wir merken uns den Pfad und fügen ihn mit dem zweiten Befehl zu /etc/shells hinzu. Eine Alternative zu diesen beiden Befehlen wäre wohl
sudo which git-shell >> /etc/shells
Ich habe es aber nicht ausprobiert und gebe daher darauf auch keine Garantie.
Zum Schluss muss der git User noch gezwungen werden, git-shell zu verwenden.
sudo chsh git -s $(which git-shell)
Benutzer hinzufügen
Für jeden Benutzer des GIT Servers muss ein öffentlicher Schlüssel hinterlegt werden. Nehmen wir einmal an, diese Schlüssel befinden sich bereits in den Dateien git-user1.pub, git-user2.pub usw. im Verzeichnis /tmp. Mit diesen Befehlen ordnen wir die Schlüssel (und deren Besitzer) dem git Account zu.
sudo cat /tmp/git-user1 >> /home/git/.ssh/authorized_keys sudo cat /tmp/git-user2 >> /home/git/.ssh/authorized_keys ...
Repositorys einrichten
Mit folgenden Befehlen wird ein neues Repository in /home/git/repos eingerichtet:
ssh ich@my_server cd /home/git/repos sudo mkdir test.git cd test.git && sudo git init --bare && cd .. sudo chown -R git.git test.git
Natürlich kann man sich dafür ein kleines Skript schreiben, das den Namen des Repositorys als Parameter bekommt. Wenn man dieses Skript newrepo nennt, kann man ein neues Repository leicht mit zwei Befehlen erzeugen.
ssh ich@my_server sudo ./newrepo repo_name
Clients einrichten
Auf jedem Rechner, von dem aus wir auf den GIT Server zugreifen wollen, müssen wir noch ein paar kleine Vorbereitungen treffen.
Zuerst müssen wir ein Schlüsselpaar erzeugen und den öffentlichens Schlüssel auf den Server kopieren, so dass wir ihn da zu den erlaubten Schlüsseln hinzufügen können (s. Benutzer hinzufügen)
cd ~/.ssh # Windows: cd c:\users\ich\.ssh # Schlüsselpaar erzeugen. # Wenn nach dem Namen gefragt wird, geben wir „ich-git“ ein. ssh-keygen # Öffentlichen Schlüssel auf Server kopieren scp ich-git.pub ich@my_server:/tmp
Jetzt müssen wir uns nur noch mit dem richtigen Schlüssel anmelden. Dazu fügen wir den folgenden Text in unsere SSH Konfiguration in ~/,ssh/config (unter Windows c:\users\ich\.ssh\config) ein.
Host git User git Hostname my_server IdentityFile ~/.ssh/ich-git
Jetzt können wir das erste Repository vom Server holen. Die URL dafür ist git:repos/test.git, also
git clone git:/repos/test.git
Der Server-Name git wird durch den „Host“ Eintrag in der SSH Konfiguration übersetzt in git@my_server. Zur Anmeldung wird der angegebene Schlüssel, dessen öffentlicher Teil auf dem Server hinterlegt sein muss, verwendet.
Auf meinem Windows-Rechner ist GIT for Windows installiert. Damit werden auch die erforderlichen Tools (ssh.exe, ssh-keygen.exe und scp.exe installiert). Je nach Einstellungen bei der Installation, kann es sein, dass die UnixTools nur in der git-bash im Suchpfad sind. Wenn sie (wie bei mit) im globalen Suchpfad gefunden werden, kann statt git-bash auch cmd, tcc oder eine anderer Shell verwendet werden.