Wichtige Info

Die Inhalte, die du hier siehst stelle ich dir ohne Werbeanzeigen und ohne Tracking deiner Daten zur Verfügung. Trotzdem muss ich die Server bezahlen sowie Zeit in Recherche, Umsetzung sowie Mail Support stecken.
Um dies leisten zu können, verlinke ich in einigen Artikeln auf die Plattform Amazon. Alle diese Links nennen sich Afiliate Links. Wenn du dir mit diesem Link etwas kaufst, dann erhalte ich eine kleine Provision. Dies ändert jedoch NICHT den Preis, den du bezahlst!
Falls du mich also unterstützen möchtest, kannst du auf den Link zum Produkt klicken und hilfst mir dabei, dieses Hobby weiter zu betreiben.
Da ich Keine Werbung schalte und keine Spenden sammle, ist dies die einzige Möglichkeit, meine Systeme und mich zu finanzieren. Ich hoffe du kannst das verstehen :)



Private Github Repos mit PAT auf Systemen synchronisieren


Einleitung

Was ist ein Personal Access Token (PAT)?

Ein Personal Access Token (PAT) ist ein spezieller Zugangsschlüssel, den du in GitHub erzeugst. Er ersetzt das Passwort für Git-Vorgänge über HTTPS. Mit einem PAT kannst du private Repositories klonen, pullen und pushen. Dabei hast du mit einen Accesstoken die Möglichkeit, die entsprechenden Berechtigungen sehr spezifisch zu definieren.

Hauptteil

PAT erstellen

Erstelle den Token in GitHub unter Settings → Developer settings → Personal access tokens → Fine-grained tokens.

Als Token name kann man alles eingeben, was der persönlichen Identifizierung dienlich ist. Das selbe gilt für die Description.

Beim "Repository access" muss geprüft werden, was auf den spezifischen Fall zutrifft. Viele meiner Repositories sind privat gestellt - daher nutze ich immer die "Only select repositories" Option und vergebe für ein Repo immer auch einen eigenen PAT. Damit habe ich die Flexibilität, wenn man etwas passieren sollte und ich einen Token verliere, dass ich diesen ersetzen kann, ohne das ich andere Dienste beeinflusse.

Zuletzt wird unter "Permissions" ausgewählt, was der token alles ermöglichen kann. In meinem Fall möchte ich nur das die Repo Inhalte heruntergeladen werden können. Daher wähle ich: (Die Option ist nur Verfügbar, wenn diese auch Sinn ergibt! - Wenn Repository access auf "Public repositories" steht, wird diese Option (sinnhafterweise) nicht angezeigt...
Add Permissions -> Contents



Zuletzt auf "generate token" klicken

Repository klonen

git clone https://github.com/<BENUTZERNAME>/<REPOSITORY>.git

Gib als **Username** deinen GitHub-Namen ein, als **Passwort** den PAT.

Credential Helper einrichten

cd /var/www/<<dein Ordner>>
sudo -u www-data git config credential.helper "store --file=/var/www/.git-credentials/<REPO>.git-credentials"

Beim nächsten `git pull` wirst du nach Username und Token gefragt. Git speichert diese in der angegebenen Datei.

Aufbau der .git-credentials-Datei

https://<USERNAME>:<TOKEN>@github.com


Beispiel (mit Dummy-Daten):
https://demoUser:ghp_1234BeispielToken@github.com

Rechte und Sicherheit

sudo chown www-data:www-data /var/www/.git-credentials/<REPO>.git-credentials
sudo chmod 700 /var/www/.git-credentials/<REPO>.git-credentials

So stellst du sicher, dass niemand außer `www-data` den Token auslesen kann. Wichtig ist, dass der User auch ausführende Rechte hat, da sonst das abrufen nicht funktioniert -> Entsprechend 700 verwenden, nicht 600 oder ähnliches!

Repo aktualisieren

sudo -u www-data git pull

Die gespeicherten Zugangsdaten werden automatisch genutzt.

Häufige Fehler

Schwerwiegend: nicht in einem Git-Repository → Credential Helper wurde ohne cd ins Repo gesetzt.
Lösung: zuerst ins Repo wechseln.

Konnte Sperre für Zugangsdatenspeicher nicht bekommen → Rechteproblem. Lösung: Ordner anlegen, chown und chmod korrekt setzen. (www-data und 700 -> im Fall eines Webserver)

Global vs. Repo-spezifisch

Mit einem PAT und dem Credential Helper kannst du private GitHub-Repositories auf deinem Server klonen und synchronisieren. Es ist möglich sowohl global als auch repo-spezifisch zu arbeiten.

Es gibt daher grundsätzlich auch die möglichkeit den Command
sudo -u www-data git config credential.helper "store --file=/var/www/.git-credentials/<REPO>.git-credentials"

Mit einem --global zu erweitern. Damit wird die Config dann im Homeverzeichnis des Users angelegt und es können alle Userrepos mit den entsprechenden Token(s) verwendet werden.
Zuletzt gibt es auch eine --system option. Damit ist es dann Systemweit...


Back…