Ein Synology Network Attached Storage (NAS) bietet neben der Möglichkeit einer eigenen Cloud auch die Möglichkeit eines eigenen Git-Servers. Dieser Artikel hilft ein wenig über die dabei auftretenden Schwierigkeiten hinweg, speziell wenn man auf einem Windows System arbeitet und Git mit einem SSH Zertifikat benutzen will. Warum das SSH wichtig ist, erklärt sich später von selbst.
Schritt 1 – Git auf der Synology installieren und Benutzer konfigurieren
Nachdem man über das Paketzentrum den Git-Server installiert hat, wählt man im Hauptmenü das neue Symbol aus und klickt es an. Ein spartanischer Dialog geht auf, der nur dazu dient, die Benutzer auszuwählen, die den Git-Server benutzen dürfen. Man klickt also die Zugriffserlaubnis des jeweiligen Benutzers [benutzername] an und beendet dann mit Übernehmen.
Die Git-Benutzer müssen in die Administrator Gruppe eingetragen werden. Dies erledigt man über die Synology Systemsteuerung\Benutzer. Den Benutzer auswählen, Bearbeiten und unter Benutzergruppen den Haken bei administrators setzen.
Schritt 2 – Synology WebDAV aktivieren
WebDAV muss aktiviert sein. In der Synology Systemsteuerung auf Dateidienste klicken und zunächst den Windows Dateidienst aktivieren und Übernehmen. Im Top-Menü oben dann rechts auf WebDAV gehen und dann unten wieder den WebDAV aktivieren und Übernehmen.
Schritt 3 – Synology SSH aktivieren
SSH Zugriff sollte aktiviert sein. Hierzu in der Synology Systemsteuerung auf Terminal & SNMP klicken und den SSH-Dienst aktivieren. SSH ermöglicht eine zertifikat-basierte Nutzung, dazu jedoch erst später noch mehr.
Schritt 4 – Repository-Ordner anlegen, Git dort initialisieren und danach Ordner-Rechte vergeben
Erstellen eines gemeinsamen Ordners auf der Synology, welcher die Repositories hostet. Hierfür kann die File Station oder die Systemsteuerung der Synology (Gemeinsamer Ordner) benutzt werden. Besser ist jedoch die Kommandozeile von Windows aus. Hierzu nimmt man einen SSH-tauglichen Shell Client wie z.B. Putty verbindet mit sich per SSH auf Port 22 mit der IP-Adresse der Synology (Benutzer: root mit admin passwort benutzen) und landet in root’s home Verzeichnis. Wir wechsel eine Ebene hoch und schauen uns mit dem Kommando ll die Directory Struktur an. Wir wechseln dann in den Ordner, wo die gemeinsamen Ordner und die home-Verzeichnisse liegen. Typischerweise heisst der Ordner volume1. Hier legen wir jetzt einen Ordner names git an. Wir wechseln in den neuen Ordner und legen dort mal einen Projekt-Ordner an (z.B. mkdir project_1). Wir wechseln in den Ordner und führen zunächst ein git init –bare –shared aus. Danach noch ein git update-server-info. Ein ll zeigt uns nun ein von Git erstelltes Repository. Wir springen jetzt wieder 2 Ordner Ebenen zurück, um wieder den git Ordner zu sehen. Nun müssen wir die Rechte, Eigentümer und Gruppe des git Ordners setzen, und das rekursiv für alle darin liegenden Verzeichnisse, also auch unser erstes Repository.
cd .. cd volume1 mkdir git cd git mkdir project_1 cd project_1 git init --bare --shared git update-server-info cd .. cd .. chmod -R 772 git chown -R admin git chgrp -R administrators git
Jetzt können später alle zugelassenen User der Synology den Repository-Ordner project_1 schreiben, typischerweise von Windows aus mit Hilfe des Git Kommandos. Für weitere, zukünftige Repositories (Ordner) ist dann analog zu verfahren, d.h. das initiale Erzeugen erfolgt immer hier auf der Synology und unter Windows wird nur geclont. Die putty-Shell kann offen bleiben, wir brauchen sie später noch.
Schritt 5 – Git unter Windows installieren, Umgebungsvariable setzen, Git-Bash-Link Eigenschaften festlegen
Als nächstes installiert man Git unter Windows, am besten mit allen Default-Einstellungen während der Installation. Zum Anfang und zum Testen empfiehlt sich die mitgelieferte Git-Bash. Sie liegt nach der Installation als Verknüpfung auf dem Desktop. Wir gehen im Folgenden mal davon aus, dass unsere lokalen Projekte (auf dem Windows Rechner) im Verzeichnis d:\projekte\git\ liegen sollen. Mit lokalem Projekt ist jeweils ein geclontes Git Projekt (Repository) von der Synology gemeint. Gegebenenfalls kann man noch die Git-Extensions installieren. Das ist ein kostenloses, grafisches Benutzer Interface (GUI) für Git. Die Extensions arbeiten mit der Umgebungsvariable HOME, weshalb wir diese gleich in den Erweiterten Systemeigenschaften\Umgebungsvariablen wie folgt setzen: HOME=d:\projekte\git. Wir können diese Systemvariable auch gleich benutzen, um unsere Git-Bash gleich im richtigen Verzeichnis zu starten. Dazu ändern wir die Eigenschaft Ausführen in der Git-Bash Verküpfung zu %HOME%. Der Doppelklick startet die Git-Bash nun gleich im gewünschten Verzeichnis der lokalen Git-Repositories. Die sind ja aber noch nicht da. Wir müssen erstmal eins clonen, nämlich jenes, welches wir in Schritt 4 schon auf der Synology angelegt haben.
Schritt 6 – Git Repository unter Windows clonen
Wir geben in der Git-Bash ein: git clone ssh://benutzername@IP-Adresse_Synology/volume1/git/project_1. Verdammt … der Ziel-Server ist scheinbar nicht SSH vertrauenwürdig und faselt was von Fingerprint. Wir sagen yes und … Mist, Synology will jetzt natürlich das Passwort für den Benutzer benutzername. Wir geben es ein und drücken Enter. Git sollte nun kurz arbeiten und dann mit der Meldung warning: You appear to have cloned an empty repository abschliessen. Ein Blick in den Ordner d:\projekte\git sollte dort nun den Ordner project_1 enthalten, das leere, erste geclonte Repository unseres Git-Servers. Prima soweit … Was jetzt aber extrem nervt, ist die Tatsache, dass wir bei jedem Git Befehl nach dem Passwort für die Synology gefragt werden. Abhilfe schafft ein Zertifikat nach dem Public/Private Key Verfahren, mit dessen Hilfe sich unser Windows Rechner automatisch bei der SSH Verbindung authentifiziert.
git clone ssh://benutzername@IP-Adresse_Synology/volume1/git/project_1
Schritt 7 – Synology Git Zugriff per SSH Zertifikat einrichten
Erstellen eines SSH-Zertifikates. Dieser Schritt ist der schwierigste, weil er sehr viel Sorgfalt erfordert. Eine kleine Unachtsamkeit wird immer dazu führen, das beim Absetzen eines Git-Kommandos in Richtung Synology mit einer Passwort-Abfrage beginnt, was letztendlich bedeutet, dass dieser Schritt nicht korrekt ausgeführt wurde. Ich selbst habe hierfür mehrere Stunden recherchiert und war kurz vor der Verzweifelung, bis es dann doch geklappt hat !!
Wir gehen zurück zur putty-Shell, wechseln auf der Synology in das home-Verzeichnis homes aller Benutzer. Per ll schauen wir uns mal alle home-Verzeichnisse darin an. Jeder Benutzer hat dort einen eigenen Ordner, dessen Rechte auf 755 stehen sollten. Falls nicht, chmod 755 benutzername tut das dann. Weiterhin sollte der Owner des Ordners der jeweilige benutzername sein und die Gruppe sollte users sein. Falls nicht, tun chown und chgrp hier wieder ihren Dienst.
cd \ cd volume1 cd homes
Wir wechseln nun in den home-Ordner des Benutzers, für den der Git-Server konfiguriert werden soll und geben folgendes Kommando ein: ssh-keygen -t rsa. Auf die Frage nach Passphrase lassen wir diese leer und auf die Frage nach einem Namen für die Files nehmen wir id_rsa_1. Es werden 2 Files erzeugt. id_rsa_1 und id_rsa_1.pub. Das pub-File benennen wir um in authorized_keys. Dann erzeugen wir per mkdir .ssh den Ordner .ssh und verschieben authorized_keys dort hinein.
cd benutzername ssh-keygen -t rsa mv rsa_1.pub authorized_keys mkdir .ssh mv authorized_keys .ssh
Wir gehen dann in den Ordner und öffnen das File per vi-Editor und springen ans Ende, wo etwas wie root@NameDerSynology steht. Wir ersetzen root durch benutzername und speichern das File wieder. (wir sind immer noch als root eingeloggt !!)
Das File authorized_keys benötigt die Rechte 600 sowie den Eigentümer benutzername und die Gruppe users. Wir verlassen .ssh per cd .. und prüfen per ll ob der Ordner .ssh die Rechte 700 den Eigentümer benutzername und die Gruppe users hat. Falls nicht, tun chmode, chown und chgrp hier wieder ihren Dienst.
Als nächstes müssen wir dem SSH der Synology mitteilen, dass es Zertifikate benutzen soll. Dazu gehen wir per cd /etc/ssh/ in den Konfig-Ordner für SSH und modifizieren das File sshd_config wie folgt. Es müssen ggf. 2 Einträge erschaffen oder nur die Kommentarzeichen am Anfang ihrer Zeilen entfernt werden, damit sie dann so aussehen:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
Damit sind wir auf der Synology erstmal fertig.
Jetzt brauchen wir das File id_rsa_1 auf dem Windows Host. Dazu benutzen wir am besten WinScp. Das Programm erlaubt bequemes Navigieren und File-Transfers vom und zum Synology. Wir öffnen also eine Verbindung zum Synology (Verwendung von Benutzer root und admin Passwort). Im home-Verzeichnis des Benutzers benutzername liegt das generierte id_rsa_1, welches wir nun auf den Windows Rechner verschieben. (File markieren, F6 drücken = Herunterladen und Löschen). Den Speicherort auf dem Windows Rechner merken !! WinScp kann dann wieder geschlossen werden.
Nun startet man das Programm puttygen.exe aus dem Putty Programm-Verzeichnis. Wir benennen id_rsa_1 um in id_rsa_1.ppk und laden es in den Generator. Im Menü wählen wir nun Conversions\Export OpenSSH key aus und speichern das File als id_rsa ohne Erweiterung ab.
Nun gehen wir in unseren git Projekt-Ordner d:\projekte\git und erzeugen hier einen Ordner .ssh. In diesem Ordner legen wir das neue, exportierte id_rsa File ab. Wir löschen nun ein ggf. erstelltes Verzeichnis d:\projekte\git\project_1 um das Clonen des Repositories erneut testen zu können.
Und nun kommt der grosse Moment: Zurück in die Git-Bash Shell. Dort geben wir wieder git clone ssh://benutzername@IP-Adresse_Synology/volume1/git/project_1 ein. Wenn jetzt alles richtig konfiguriert ist, sollte keine Passwort-Eingabe mehr erscheinen und die Meldung warning: You appear to have cloned an empty repository. sollte ausgegeben werden. Wenn das Repository nicht mehr leer ist, fehlt dieser Hinweis, wie das Beispiel hier zeigt.
Ist dies nicht der Fall, liegt es meistens an falschen Rechten, Owner oder Gruppe der Ordner auf der Synology. Man kann auch nochmal auf dem Windows Host einen Blick in die unter d:\projekte\git\.ssh abgelegte id_rsa werfen. Hierin sollte die oberste Zeile so aussehen: —–BEGIN RSA PRIVATE KEY—–. Steht dort was von OpenSSH, war der Export in puttygen falsch !!
Ich wünsche jedenfalls gutes Gelingen und etwas Geduld, um der Anleitung sorgfältig folgen zu können !!