Kategorie:

Git und OpenSSH mittels Docker auf UGREEN-NAS installieren – so geht’s

Du möchtest Git auf deinem UGREEN NAS nutzen, ohne dich mit manuellen Installationen oder Paketen herumzuschlagen? Mit Docker kannst du Git ganz einfach in einem Container ausführen – isoliert, sauber und schnell eingerichtet. In diesem Artikel zeige ich dir Schritt für Schritt, wie du Git per Docker installierst und nutzt.

Git in Docker auf UGREEN NAS installieren
Das lernst du in diesem Artikel

Wir erstellen auf dem UGREEN NAS einen Docker-Container. In diesem Docker-Container lassen wir einen Git-Server laufen, auf den wir per SSH von einem externen PC aus zugreifen und ein Repository klonen können.

Ausgangslage

Wir nutzen das UGREEN NAS mit dem UGOS Pro Betriebssystem. Weiterhin haben wir 2 Speicherpools angelegt:

  • Speicherpool 1: Vier HDD-Festplatten in RAID 6
    /volume1/
  • Speicherpool 2: Zwei SSD-Festplatten in RAID 1
    /volume2/

In Speicherpool 1 findet unsere Datensicherung statt. Auf den SSD-Festplatten installieren wir sämtliche Programme wie Docker.

Git soll also auf dem Speicherpool 2 auf den SSD-Festplatten laufen, wohingegen die Repositories im Speicherpool 1 unter /volume1/@home/git/ liegen sollen.

Schritt 1: Git-Adminbenutzer anlegen

Es ist leider ein klassisches NAS-„Feature“, dass du dich mit einem normalen Benutzerkonto nicht per ssh am NAS anmelden kannst. Aus Sicherheitsgründen entscheiden wir uns hier, ein eigenes Git-Adminkonto anzulegen und diesem nur die Verwendung von Git über ssh zu erlauben.

Lege also in den Einstellungen einen neuen Admin-Benutzer an und nenne ihn „git“. Alles weitere folgt dann in den nächsten Schritten.

Schritt 2: Docker auf dem UGREEN NAS installieren

Stelle sicher, dass Docker bereits auf deinem UGREEN NAS läuft. Falls nicht, findest du Docker im App Center und kannst es mit wenigen Klicks installieren.

UGREEN NAS Docker App Center

Schritt 3: SSH auf der UGREEN NAS aktivieren

In der Systemsteuerung musst du nun unter Terminal SSH auf Port 22 aktivieren, damit du per Remote-Shell von Deinem PC aus auf die NAS zugreifen kannst.

SSH auf der UGREEN NAS aktivieren.

Schritt 4: Neues Docker-Projekt anlegen

In meinem Fall habe ich eine SSD-Festplatte eingesetzt, auf der ich die Docker-Container laufen lassen möchte. Daher ist mein Zielpfad /volume2/docker/. Auf deinem System kann sich dieser Pfad unterscheiden.

Erstelle nun dein Docker-Projekt und verwende folgenden Speicherpfad:

Als Docker-Compose Setup verwende folgendes Skript. Wenn du Docker und Git auf dem selben Volume laufen lassen möchtest, musst du die hier nochmal dementsprechend anpassen:

services:
  git-shell:
    image: alpine:latest
    container_name: git-shell
    command: sleep infinity
    tty: true
    stdin_open: true
    volumes:
      - /volume2/docker/git-alpine:/git-alpine # Docker
      - /volume1/@home/git/repositories:/git-repos # Git-Repos 
    ports:
      - "2222:22"
    restart: unless-stopped
Tipp

Wichtig zu beachten: Das Image von alpine/git enthält nur Git, aber keine Shell-Kommandos wie sleep oder sh. Dies ist aber erforderlich, wenn du den Container dauerhaft laufen lassen möchtest. Mit der Option tty: true wird eine virutelle Konsole geöffnet und stdin_open: true ermöglicht es, dass der Container Eingaben akzeptiert.

Die Port-Angabe 2222:22 bedeutet, dass Verbindungen zum Port 2222 des Host-Systems an den SSH-Port 22 im Docker-Container weitergeleitet werden, während der Container weiterhin auf Port 22 für SSH-Verbindungen lauscht.

Anschließend läuft der Container und du kannst per Shell auf Git zugreifen.

Docker Git Container gestartet

Schritt 5: In Docker-Container einloggen und Git sowie OpenSSH installieren

Nun erstellst du ein Git-Repository innerhalb des Alpine-Docker-Containers auf deinem NAS:

1. Einloggen

Logge dich nun per SSH mit dem Git-Benutzer ein und gehe in das Verzeichnis, in dem die Docker-Compose-Datei liegt:

ssh [email protected]
cd /volume2/docker/git-alpine

Logge dich nun in den Docker-Container ein:

sudo docker exec -it git-shell /bin/sh

2. Git und OpenSSH installieren

Da es sich um ein schlankes Alpine-Image handelt, musst du Git sowie OpenSSH erst noch installieren:

apk update
apk add --no-cache git
apk add --no-cache openssh

In den nächsten Schritten zeige ich dir, wie du per SSH von einem externen Rechner aus auf das Repo zugreifen und es wie einen echten Git-Server nutzen kannst.

Schritt 6: Im Docker-Container Benutzer anlegen

Du musst jetzt im Docker-Container einen Benutzer mit dem Namen git anlegen. Dieser sollte die selbe UID des Git-Benutzers im Host-System (UGREEM-NAS) haben. Öffne ein neues Terminal und gib im Hostsystem folgendes ein:

git@DXP4800PLUS:~$ id -u git

Diese UID (in unserem Fall 1005) merkst du dir nun und legst den neuen Benutzer im Docker-Container wie folgt an und vergibst diesem Benutzer das selbe Passwort wie dem des Hostsystems:

adduser -D -u 1005 -G wheel git
passwd git

Schritt 7: SSH-Konfiguration im Container anpassen

Suche in der Datei /etc/ssh/sshd_config die folgenden Zeile und kommentiere sie als root ein:

vi /etc/ssh/sshd_config
PubkeyAuthentication yes

Wenn du Änderungen an der SSH-Konfiguration vorgenommen hast, starte den SSH-Daemon neu. Zuvor erstellst du aber noch einen Hostschlüssel:

ssh-keygen -A
/usr/sbin/sshd

Mit folgendem Befehl kannst du testen, ob der SSH-Dienst korrekt läuft:

ps aux | grep sshd

Schritt 8: Git-Repository anlegen

Wie anfangs erwähnt, soll das Git-Repository auf den HDD-Festplatten erstellt werden. Einen Git-Benutzer haben wir angelegt und das Verzeichnis /volume1/@home/git/repositories/ existiert bereits und ist im Docker-Container unter /git-repos/ gemountet.

Jetzt kannst du das Git-Repository im Verzeichnis /git-repo als Benutzer git erstellen:

su git
cd /git-repos
git init --bare mein-repo.git

Schritt 9: Git von Remote testen

Nun testen wir die Verbindung. Öffne ein Terminal auf deinem PC (in unserem Fall ein Linux-PC) und klone das Repository:

git clone ssh://[email protected]:2222/git-repos/mein-repo.git

Wichtig hierbei ist die Portangabe 2222 hinter dem Host. Du musst nun den Fingerprint mit yes bestätigen und dich mit deinem Passwort anmelden. Anschließend kannst du dein Git-Repository nutzen.

Solltest du ein Problem mit dem Fingerprint haben, kannst du den Eintrag mit folgender Zeile entfernen:

ssh-keygen -R [192.168.178.185]:2222

Optional: Einrichtung einer passwortlosen SSH-Verbindung mit Public/Private Key

Mit der vorherigen Anleitung musst du dich bei jedem Git-Befehl, den du an den Server schickst, mit einem Passwort authentifizieren. Stattdessen nutzen wir Public/Private Key Authentication. Dies erhöht nicht nur den Komfort, sondern auch die Sicherheit deiner Verbindung, da Passwörter vermieden werden.

Schritt 1: SSH-Schlüssel auf dem Host-System erstellen

Zuerst musst du ein SSH-Schlüsselpaar auf deinem Remote-PC erstellen. Dies kannst du mit dem folgenden Befehl tun:

ssh-keygen -t rsa -b 4096 -C "[email protected]"
  • Du wirst nach einem Speicherort gefragt. Standardmäßig wird der Schlüssel unter ~/.ssh/id_rsa gespeichert. Drücke einfach Enter, um diesen Standard zu verwenden.
  • Du kannst auch ein Passwort für den privaten Schlüssel festlegen. Wenn du keinen möchtest, lasse das Feld leer.

Schritt 2: Public Key in den Docker-Container kopieren

Nun musst du deinen Public Key in den Docker-Container übertragen, damit er zur Authentifizierung verwendet werden kann.

Zeige den Inhalt deines Public Keys auf deinem Remote-System an:

cat ~/.ssh/id_rsa.pub

Erstelle das .ssh-Verzeichnis im Home-Verzeichnis mit deinem git-Benutzer, falls es noch nicht existiert, und setze die richtigen Berechtigungen:

mkdir -p /home/git/.ssh
chmod 700 /home/git/.ssh

Füge nun deinen Public Key in die Datei authorized_keys wie folgt ein:

vi /home/git/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC...
Tipp

Prüfe, dass das Verzeichnis /home/git/.ssh auch wirklich dem Benutzer git gehört, sonst funktioniert es nicht. Falls du die Verzeichnis-Berechtigung ändern möchtest, kannst du das mit folgendem Befehl tun: chown -R git:wheel /home/git/.ssh

Schritt 3: SSH-Server neustarten

Falls der SSH-Server im Container bereits läuft, starte ihn als root neu, um sicherzustellen, dass die Änderungen an der authorized_keys-Datei wirksam werden:

/usr/sbin/sshd -t
/usr/sbin/sshd

Schritt 4: Passwortlose Verbindung testen

Jetzt kannst du die passwortlose SSH-Verbindung testen. Versuche, dich von deinem Host-System aus mit dem Docker-Container zu verbinden:

ssh [email protected] -p 2222

bzw. das Git-Repository klonen:

git clone ssh://[email protected]:2222/git-repos/mein-repo.git

Docker Image sichern

Normalerweise ist es bei Docker so, dass ein Container beim Neustart wieder auf den ursprünglichen Zustand des zugrunde liegenden Images zurückgesetzt wird. Deshalb empfiehlt es sich, eine Dockerfile anzulegen, in der alle Änderungen dokumentiert und bei Bedarf wiederhergestellt werden können.

Docker Container exportieren

Bei der Docker-Integration des UGREEN NAS ist es allerdings etwas anders: Zu jedem Container wird automatisch ein lokales Image erstellt. Wenn du also Änderungen innerhalb des Containers vornimmst – etwa Pakete installierst oder Konfigurationsdateien anpasst – werden diese direkt in diesem lokalen Image gespeichert. Dadurch bleiben deine Anpassungen auch nach einem Neustart des Containers erhalten.

Docker-Container oder -Image exportieren

Sobald du mit deiner Konfiguration zufrieden bist, solltest du dein Docker-Setup dennoch sichern – am besten durch einen Export. So kannst du bei Bedarf jederzeit darauf zurückgreifen oder es auf ein anderes NAS-System übertragen.

  • Container exportieren
    Öffne die Docker-App → Schnellzugriff → Container auswählen → Exportieren
    → Ergebnis: eine .json-Datei mit Containerkonfiguration (keine Daten oder Images) sowie eine .tar-Datei, die das Image enthält

Bitte beachte, dass nachdem du den Container aus einer json-Datei wiederhergestellt hast, du diesen Container keinem Projekt zuweisen kannst.

Häufig gestellte Fragen (FAQ)

Wie kann ich Git, SSH und andere Pakete im Docker-Container updaten?

Um Git, SSH und andere Pakete in deinem Docker-Container zu aktualisieren, ohne das Setup zu verlieren, kannst du die folgenden Schritte durchführen im Docker-Container ausführen:

# Paketlisten aktualisieren:
apk update   

# Alle Pakete auf die neueste Version aktualisieren:       
apk upgrade 

# Einzelne Pakete aktualisieren:
apk add --no-cache git openssh

# Container neu starten (optional):
sudo docker restart git-shell

Nach einem Neustart des Container bekomme ich beim Auschecken die Meldung connection refused – Was kann ich tun?

Es kann sein, dass der SSH-Dienst nach einem Restart im Container nicht richtig läuft oder der Port ist nicht korrekt gemappt. Führe in Docker folgende Befehle als root aus:

# Prüfen ob der Prozess läuft, falls nicht...
ps aux | grep sshd

# SSH-Key generieren (nur beim ersten Mal notwendig):
ssh-keygen -A

# SSH-Dienst neustarten
/usr/sbin/sshd

Anschließend sollte wieder alles funktionieren.

Was kann ich tun, wenn ich auf meinem Remote-PC diese Warnung angezeigt bekomme: Remote Host Identification has changed.

Diese Warnung erscheint, weil sich der SSH-Host-Key auf dem Server geändert hat – z. B. nach einem Neustart des Containers oder wenn du den SSH-Dienst neu initialisiert hast (ssh-keygen -A). Dein System erkennt den neuen Key nicht und warnt dich vor einem möglichen Man-in-the-Middle-Angriff. Das ist eine normale Sicherheitsmaßnahme.

Lösung: Führe folgenden Befehl aus, um den veralteten Eintrag zu entfernen.

ssh-keygen -R [192.168.178.185]:2222

Jetzt kannst du dich neu verbinden und musst beim ersten Verbindungsaufbau den Fingerprint akzeptieren.

Fazit

Herzlichen Glückwunsch! Du hast nun erfolgreich einen schlanken und Ressourcen schonenden Git-Server auf deinem UGREEN NAS eingerichtet und kannst per SSH darauf zugreifen. Mit Docker hast du eine isolierte und saubere Umgebung für Git geschaffen, die sich leicht verwalten lässt. Jetzt kannst du deine Projekte sicher und effektiv versionieren, ohne dich mit unnötigen Installationen und Konfigurationen auseinanderzusetzen.

Optional kannst du auch eine passwortlose SSH-Verbindung einrichten, um den Zugang noch sicherer und bequemer zu gestalten. Wenn du weitere Anpassungen wünschst, gibt es noch viele Möglichkeiten, deinen Git-Server weiter zu optimieren und abzusichern.

Sobald UGREEN in seinem UGOS Pro bzw. App Center eine native Git-App bereitstellt, kannst du die Git-Repositories, die auf Volume2 liegen, damit dann einfach weiter nutzen und den Docker-Container löschen. Bis es soweit ist, hast du mit Docker eine stabile Git-Lösung.


Navigation:

Veröffentlicht von: